• 在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码的大小来遍历的,所以呈现出来的就是有序的效果。
但是在底层存储的时候它是乱序的。

[知了堂学习笔记]_集合接口list与集合接口set的区别的更多相关文章

  1. [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第3讲(逻辑方法的实现)

    整体展示: 上一讲实现了诸多对象,这次我们就需要实现许多逻辑方法,如控制飞机移动,判断子弹击中敌机,敌机与英雄飞机相撞等等.并且我们在实现这些功能的时候需要计时器去调用这些方法.setInterval ...

  2. [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第2讲(对象的实现及全局变量的定义)

    整体展示: 一.全局变量 /*===================玩家参数==========================*/ var myPlane; //英雄对象 var leftbtn = ...

  3. [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第1讲(实现思路与游戏界面的实现)

    整体效果展示: 一.实现思路 如图,这是我完成该项目的一个逻辑图,也是一个功能模块完成的顺序图. 游戏界面的完成 英雄飞机对象实现,在实现发射子弹方法过程中,又引出了子弹对象并实现.在此时,英雄飞机能 ...

  4. [知了堂学习笔记]_牵线Eclipse和Tomcat第二篇 —— 安装Tomcat&&添加Tomcat到Eclipse

    来了来了~~~~~我们的"织女"--Tomcat来了,牛郎们等急了吧!哈哈! 一.安装Tomcat 下载地址:http://tomcat.apache.org/download-7 ...

  5. [知了堂学习笔记]_牵线Eclipse和Tomcat第一篇 —— 配置Java环境变量&&安装eclipse

    一.先给他们提供一个"浪漫的"环境,比如传说中的"鹊桥"--java环境变量.哈哈! 配置java环境变量. 下载jdk,根据自己电脑的版本和操作位数选择不同的 ...

  6. [知了堂学习笔记]_用JS制作《飞机大作战》游戏_第3讲(玩家发射子弹)

    一.公布上一讲中玩家飞机上.下.右移动实现的代码: /*=========================键盘按下事件 keycode为得到键盘相应键对应的数字==================== ...

  7. [知了堂学习笔记]_用JS制作《飞机大作战》游戏_第4讲(创建敌方飞机、敌方飞机发射子弹、玩家子弹击中敌方小飞机,小飞机死亡)

    一.创建敌方飞机 1.思考创建思路: 创建敌方飞机思路与创建玩家飞机思路一样: (1)思考敌方飞机具备什么属性: 敌方飞机的图片.坐标.飞行速度.状态(是否被击中) 设置小飞机被击中时消失时间.飞机可 ...

  8. [知了堂学习笔记]_记一次BootStrap的使用

    效果图如下: 一.简介: 什么是Bootstrap?  Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架. 什么是响应式布局? 引用一句Bootstrap的标题语 " ...

  9. [知了堂学习笔记]_用JS制作《飞机大作战》游戏_第2讲(四大界面之间的跳转与玩家飞机的移动)

    一.通过点击按钮事件,实现四大界面之间的跳转: (一)跳转的思路: 1.打开软件,只显示登录界面(隐藏游戏界面.暂停界面.玩家死亡界面) 2.点击微信登录(QQ登录)跳转到游戏界面,隐藏登录界面 3. ...

随机推荐

  1. Linux重启后raid5的名字发生变化

    Linux重启后raid5的名字发生变化 使用raid,每次重启后,都会变换设备路径 比如原来为/dev/md0 重启一次变成了/dev/md127 这个问题,可以使用修改配置文件来解决. 1.mda ...

  2. 3.移植uboot-使板卡支持nor、nand

    在上一章,我们添加了nor,nand启动后,uboot启动出如下图所示: 上面的Flash: *** failed *** 是属于uboot第二阶段函数board_init_r()里的代码, 代码如下 ...

  3. Windows同时安装Python2、Python3兼容运行

    Python2.Python3可以同时安装在windows上,关键是如何有选择的运行Python2还是Python3.   指定运行版本 如果你有一个Python文件叫 hello.py,那么你可以这 ...

  4. Running Solr in Docker

    Docker现在越来越火,所有的应用程序都想Docker一下,但是并没有听说在Docker上运行Solr.在没有Docker之前要想使用Solr需要在宿主机安装JDK,安装Tomcat,下载Solr程 ...

  5. Django 1.10中文文档-第一个应用Part1-请求与响应

    在本教程中,我们将引导您完成一个投票应用程序的创建,它包含下面两部分: 一个可以进行投票和查看结果的公开站点: 一个可以进行增删改查的后台admin管理界面: 我们假设你已经安装了Django.您可以 ...

  6. ubuntu16中遇到libgstreamer-0.10.so.0缺失解决方案

    1. error while loading shared libraries: libgstreamer-0.10.so.0: cannot open shared object file: No ...

  7. 开发高性能JAVA应用程序基础(内存篇)

    虽然Java的垃圾回收和当前高配置的服务器可以让程序员大部分时间忘掉OutOfMemoryError的存在,但是访问量增大后频繁的GC会额外消耗CPU (使用top查看结果为us值高),系统响应速度下 ...

  8. Java与算法之(4) - 数字全排列

    全排列是指n个数(或其他字符)所有可能的排列顺序,例如1 2 3三个数字的全排列是 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 那么问题来了,任意输入一个大于1的数字n,列 ...

  9. hackerrank Alex对战Fedor

    任意门 为了在漫长得飞行旅途中娱乐,Alex和Fedor发明了如下的一个简单的双人游戏.游戏是: 首先, Alex画一个有权无向图.该图中可能有多重边(多重边的权值可能相同或者不同). 然后,Fedo ...

  10. Codeforces 842B Gleb And Pizza【几何,水】

    B. Gleb And Pizza time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...