集合接口list与集合接口set的区别
- 在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的区别的更多相关文章
- java集合 之 Collection和Iterator接口
Collection是List,Queue和Set接口的父接口,该接口里定义的方法即可用于操作Set集合,也可以用于List和Queue集合.Collection接口里定义了如下操作元素的方法. bo ...
- 2.Java集合总结系列:List接口及其实现
在介绍List接口之前,我们先来看看 Collection 接口,因为Collection接口是 List / Set / Queue 接口的父接口,List / Set / Queue 的实现类中很 ...
- C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能
1.IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环 ...
- [知了堂学习笔记]_集合接口list与集合接口set的区别
在Java中 除了 Map以外的集合的根接口都是Collection接口,而在Collection接口的子接口中,最重要的莫过于List和Set集合接口. 今天我们就来谈谈List集合接口与Set集合 ...
- Map接口下的集合和泛型理解
一.Map接口 1. Map接口就是最顶层了,上面没有继承了.Map是一个容器接口,它与前面学的List.Set容器不同的是前面学的这些容器,一次只能传入一个元素,但是Map容器一次可以传入一对元素( ...
- Set接口下的集合
一.集合(定义字段的时候统一使用包装类) 1.集合大类分为List.Set.Map三种,其中,List集合是有序可重复的,并且可以使用普通for循环.增强for循环.正向迭代器.双向迭代器:Set集合 ...
- Java学习笔记32(集合框架六:Map接口)
Map接口与Collection不同: Collection中的集合元素是孤立的,可理解为单身,是一个一个存进去的,称为单列集合 Map中的集合元素是成对存在的,可理解为夫妻,是一对一对存进去的,称为 ...
- Java学习笔记30(集合框架四:List接口)
List接口继承自Collection接口 具有重要的三大特点: 1.有序集合:存入和取出的顺序一致 2.此接口的用户可以对列表中每个元素插入位置精确的控制:可以通过索引操作 3.可以存储重复元素 L ...
- 集合(1)—List接口的实现类ArrayList
List List接口是Collection接口的子接口,从其名称可以看出,是一个元素有序(并不是按大小排序,具有顺序索引,类似于数组),默认按照元素的添加顺序设置元素的索引. List用法 List ...
- Spring @Autowired注解用在集合上面,可以保持接口的所有实现类
CourseService课程接口有2个子类,HistroyCourseServiceImpl和MathsCourseServiceImpl public interface CourseServic ...
随机推荐
- SSH框架整合截图(二)
客户拜访管理 1 什么是客户拜访 (1)客户:与公司有业务往来的 (2)用户:可以使用系统的人 2 用户和客户关系 (1)用户和客户之间是拜访的关系 (2)用户 和 客户 是 多对多关系 ** 一个用 ...
- js日期原型扩展
当初做统计业务需要处理时间 周报:本周 上周 下周 近一周 月报上月 本月 等 需要使用时间处理 所以扩展了这些方法 <!DOCTYPE html> <html xmlns=&quo ...
- 使用angularjs的$http.post异步提交数据时,服务器接收不了的问题
一,在正常情况下,使用表单的post方法提交数据,默认请求头的Content-Type:application/x-www-form-urlencoded类型, 提交数据格式如下: 二,使用angul ...
- HDU 2815
特判B不能大于等于C 高次同余方程 #include <iostream> #include <cstdio> #include <cstring> #includ ...
- android 分享到QQ空间的全部操作
http://wiki.open.qq.com/wiki/mobile/SDK下载 <!-- QZone分享必须加上以下两个activity --> &l ...
- 安装ftp碰到的问题及解决方法
1 CRT显示乱码: 本地windows机器.改动SecureCRT的设置.找到"选项"->"会话选项"->"外观" ...
- Android - 加入Android的OpenCV依赖库(Android Dependencies) 问题
加入Android的OpenCV依赖库(Android Dependencies) 问题 本文地址: http://blog.csdn.net/caroline_wendy 假设想要加入OpenCV的 ...
- poj3685(嵌套二分)
Matrix Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 4658 Accepted: 1189 Descriptio ...
- phpstudy配置多个域名
phpstudy配置多个域名 1.端口配置对应的文件为PHPTutorial\Apache\conf\httpd.conf 直接在这个文件里面搜索localhost就可以搜到上图对应的代码那一块 第一 ...
- 从Oracle转到Mysql前需了解的50件事
我本人比较关心的几点: 1. 对子查询的优化表现不佳. 2. 对复杂查询的处理较弱 4. 性能优化工具与度量信息不足 12. 支持 SMP (对称多处理器),但是如果每个处理器超过 4 或 8 个核( ...