Java集合
集合
1. 概述
java中的集合主要指的Collection和Map两个接口大类
主要区别在于Collection是单列集合,Map是键值对的集合
相对于数组而言除了更加强大API使用,还有对通过对数据结构的灵活使用可以更加贴合实际的生产使用
2. Collection
collection接口主要包括两大类List和Set
区别在于List中的元素是可重复,Set中的元素是不可重复的
2.1 List
List 主要有ArrayList,LinkedList,两者之间的主要区别在于数据结构的不同导致的性能的差异性。
2.1.1 ArrayList
ArrayList基于数组来实现
特点:
- 查询快,能够根据下标快速定位数据
- 插入数据慢,设计到数据的移位等问题。
2.1.2 LinkedList
LinkedList基于链表来实现
特点:
- 查询慢,因为不知道数据的具体存放地址
- 插入数据块,因为设计到更少的数据迁移
这两个集合特点和区别也非常鲜明,主要是数组和链式来决定的。
数组实际是一个整齐排放的数据结构,所以当你知道数据的下标,便能直接获取数据。如果不知道下标,其实查询效率和链表也没什么区别了。而当你插入数据的时候,除非插入到坐标尾部,否则都会涉及到数据的迁移以保证其规则性(如果数组满了,申请扩容也会迁移)
链表 相对于数组也比较清晰了。实际每个数据体都存放了上个节点和下个节点的地址,所以查询会慢,而对数据的插入基本不会涉及数据的迁移,所以插入效率会比较高
2.2 Set
Set 主要使用的HashSet,LinkedHashSet,TreeSet
2.2.1 HashSet,LinkedHashSet
其中HashSet,LinkHashSet在了解HashMap后会比较好理解,因为他的底层也是实际利用HashMap和LinkHashMap来实现的
HashSet利用HashMap的key的唯一性来实现HashSet
LinkedHashSet利用LinkedHashMap的key值唯一性,以及其顺序性来实现
2.2.2 TreeSet
TreeSet底层采用二叉树实现,效率高,元素有序且唯一。如果排序需求可以考虑使用。
3.1 Map
map在实际使用中最典型的可能就是HashMap,也是必须要掌握的,具体可查询另外一篇详细文档!
3.1.1 LinkedHashMap
LinkedHashMap继承了HashMap,和它的区别在于HashMap的存放规则是随机的。而LinkedHashMap在其基础上了做了一个链表的结构。实际就是HashMap.Node<K,V> 有加了一个before和after属性。
LinkedHashMap的使用时,有两种排序规则,一种是按插入排序和访问排序
- 插入排序: 调用put时来排序,也是默认的
- 访问排序: 每次get会改变其排序,get的数据会自动到尾部
3.4 Collections
Collections.unmodifiableXXX:collection、List、Set、Map
通过Java自带的工具类来创建一个只读的集合。底层主要是对get操作直接抛出异常来保证其只读行。
Guava.ImmutableXXX:Collection、List、Set、Map
有可以通过GuavaCache下的Immu..包来保证只读性。实现都差不多。
原文作者: duteliang
原文链接: http://yoursite.com/2019/04/14/javabase/集合/
版权声明: 转载请注明出处(必须保留原文作者署名原文链接)