码迷,mamicode.com
首页 > 其他好文 > 详细

[知了堂学习笔记]_集合接口list与集合接口set的区别

时间:2017-09-25 18:56:03      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:es2017   ring   例子   while   str   span   images   技术   port   

  • 在Java中 除了 Map以外的集合的根接口都是Collection接口,而在Collection接口的子接口中,最重要的莫过于List和Set集合接口。

  今天我们就来谈谈List集合接口与Set集合接口的差异性。

 

  • 查看List集合接口的接口方法

  技术分享

  技术分享

  • 查看Set集合接口的API

  技术分享

 

  • 从两者的API中,以add和get为例来看,
  • List中提供索引的方式来添加元素和获取元素,而Set并不提供。由此可见List集合可是达到精确的存储和获取,而Set只能一个一个的比较,显然效率和实用性是比不上List集合的

 

  • List集合是有序存储,Set集合是无序存储。这里的有序和无序针对的是存储地址来说的。
  • List可以存储重复的值,Set不可以存储重复的值

  我们看下面的例子

 

/**
*向List集合里面添加一百个随机数
*/
@Test
public void listTest() { List<Integer> list = new ArrayList<>(); for (int i = 0; i < 100; i++) { Random random = new Random(); list.add(random.nextInt(101)); } Iterator<Integer> iterator = list.iterator(); while(iterator.hasNext()) { System.out.print(iterator.next().toString()+" "); } System.out.println("list 的大小="+list.size()); }

 

输出结果是:58  30  16  71  84  89  86  19  52  15  80  10  2  53  62  96  47  100  54  83  91  68  43  39  23  11  52  ...
      其中 值为52的重复出现
list的大小 = 100
      遍历了一百次,每一次的值都放到了List集合里面。

  

 

 

    /**
     * 向Set集合里面添加一百个随机数
     */
    @Test
    public void setTest() {
        
        Set<Object> set = new HashSet<>();
        
        for (int i = 0; i < 100; i++) {
            Random random = new Random();
            set.add(random.nextInt(101));
        }
        
        Iterator<Object> iterator = set.iterator();
        while(iterator.hasNext()) {
            System.out.print("   "+iterator.next());
        }
        System.out.println();
        System.out.println("set的大小="+set.size());
    }
 输出结果:0   1   2   5   6   7   8   9   10   12   13   14   15   16   18   19   21   23   24   26   27   28   30   31   ...
     发现set集合里面并没有重复的值 
 set的大小=66;
     我们本来是遍历了一百次,但是set的集合的大小只有66次。因为产生的随机数有重复的,这也证明了set集合里面不能储存重复的值。
认真观察,你会发现set集合里面遍历出来的值是有序的(从小到大),而List结合遍历出来的值是无序的。
但是怎么说Set结合是无序集合而List结合是有序集合呢。 因为我们说的有序和无序针对的是集合存储地址来说的。
在一百次循环中,获取什么值,就往List所获取的地址中存储,从低位到到位,比如:第一个是99,99就存储在第一位,第二位是2,就存储在第二位...以此类推
而对于Set集合来说,由于我们是通过HashSet的初始化它的,所以的存储方式与HashSet存储方式有关,都是根据Hash码来存储的。例如:获取的值是88,
那它就把这个值存储在Hash码为88的地址,如果是9,就把这个值存储在Hash码为9的地址,而遍历的时候,Set是根据Hash码的大小来遍历的,所以呈现出来的就是有序的效果。
但是在底层存储的时候它是乱序的。

 

以上为今天的所有分享,如需了解更加深入的知识,

    请大家进入知了堂社区:http://www.zhiliaotang.com/portal.php;

    转载请注明出处;
    请大家多多指教!欢迎提意见,非诚勿扰!!!
                     ---By GET_CHEN

[知了堂学习笔记]_集合接口list与集合接口set的区别

标签:es2017   ring   例子   while   str   span   images   技术   port   

原文地址:http://www.cnblogs.com/getchen/p/7592282.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!