list和set简单理解
来源:互联网 发布:tensorflow的windows版 编辑:程序博客网 时间:2024/06/07 05:17
List和Set是集合包中最常用的两个接口,对它们进行比较深刻的理解是用好他们的基础。
List和Set的区别很多,但是归根结底是由于它们的底层实现不一样所导致的。List的实现方式主要有:ArrayList和LinkedList,Set的实现方式主要有:HashSet、LinkedHashSet、TreeSet。
ArrayList的底层实现是数组,当向其中添加一个元素时,会先检查数组容量,不足时会对数组进行扩容。由于扩容是比较消耗效率的,因此使用ArrayList时,应予以规避,但是LinkedList底层则是链表。所以,ArrayList比较LinkedList查询速度比较快,但是赠删改效率低于LinkedList
同样的可以分析HashSet、LinkedHashSet和TreeSet。HashSet的底层实现是散列表,LinkedHashSet的底层实现是散列表加双向链表,TreeSet的底层实现的红黑树。它们元素位置取决于元素的hash值。因此采用Set进行存取的时候求取hash值是比较消耗资源的。有些便于快速获取hash值的方法是值得借鉴的,比如基本类型的包装器,当第一次运行hashCode方法,便会用一个静态变量将hash值存储起来,以后再次获取时便不需要重新计算。
明白了底层实现的不同,就明白为什么List中元素可以重复而Set中元素不能重复,事实上将元素存储在数组同一元素的散列上,是非常影响散列表性能的,散列表专门提出线性散列法和平方散列法来予以规避,而重复元素势必会插入链表中,因此Set是不允许的。就能明白为什么List中元素是按照插入顺序而Set中元素是无序的(这一点对TreeSet无效),就能明白判断相等时,为什么List中元素大小与顺序要一致,而Set中却只需元素的大小一致。
顶
0
阅读全文
0 0
- list和set简单理解
- List Set Map简单理解
- Set和List简单区别
- 简单理解List、set、Map接口之间的联系和区别?
- List 、Set 和Map的简单讲解
- 一段代码让你理解set和list的区别
- java Map set list 理解
- C++map和set的简单理解和使用案例
- List 和Set转换
- List和Set
- List Set和Map
- List、Set和Map
- Set和List
- list 和 Set
- python set和list
- 8.4 List和Set
- List、Set和Map
- list和set
- 1022.D进制的A+B (20)
- Android中几种图片特效的处理
- LeakCanary的使用
- Cpp_继承&对象模型
- 设置按钮的滑动动画实现
- list和set简单理解
- 九九乘法表
- const 理解分析
- 栈的应用(略)
- Java转换Unix时间戳方法
- ubuntu显卡安装后循环登陆的解决办法
- Android前后台判断总是前台问题解决办法
- linux-ubuntu安装(vmware虚拟机)
- Java消息队列--ActiveMq