-
集合
- Map
- HashMap
- 1.8之前使用 位桶和链表实现(1.8改用红黑树),它是线程不安全的Map,方法上都没有synchronize关键字修饰。默认16,1.7下多线程下resize,rehash时可能会出现死循环,拖死系统。默认数据量超过3/4会进行扩充操作。
- TreeMap
- 他具有一个很大的特点就是会对Key进行排序,使用了TreeMap存储键值对,再使用iterator进行输出时,会发现其默认采用key由小到大的顺序输出键值对,如果想要按照其他的方式来排序,需要重写compartor接口。底层由红黑树实现。
- HashTable
- hashTable是线程安全的一个map实现类,它实现线程安全的方法是在各个公共方法上添加了synchronize关键字。(现已不推荐使用,效率低。改用ConcurrentHashMap)
- ConcurrentHashMap
- 1.5加入,使用segment分段锁。从1.8开始采用了CAS+Synchronize技术来保障线程安全。底层采用数组+链表+红黑树的存储结构,也就是和HashMap一样。
- HashMap
- List
- ArrayList
- 底层数据结构是数组,查询快,增删慢。
- 线程不安全,效率高
- 这个ArrayListObject[]数组的默认大小为16。默认数据量超过当前定义的容量时会进行扩充操作。这里可以根据自己的使用大小,指定集合的大小 new ArrayList(num)(HashMap同原理)
- LinkedList
- 底层数据结构是链表,查询慢,增删快。
- 线程不安全,效率高
- ArrayList
- Set
- HashSet
- HashSet按照Hash算法来存储结合中的元素,因此具有良好的存取和查找的性能。底层是HashMap,value是Object
- LinkedHashSet
- 使用连表来维护元素,因为需要维护元素的插入顺序,所以性能略低,低于HashSet。继承自HashSet(HashSet内部还有对LinkedHashMap的实现)
- TreeSet
- 采用红黑树的数据结构来存储集合元素,并且支持两种排序方法,自然排序和定制排序。注意:使用TreeSet时,保证添加的对象全都实现了Comparable接口,否则会添加失败,并且抛出ClassCastExecption异常。简单一句话,如果想要TreeSet正常运行,只能添加同一种类型的对象。内部由TreeMap实现
- HashSet
- Map
-
数组
- 优点
- 数组定义简单,而且访问很方便
- 缺点
- 组中所有元素类型都必须相同
- 数组大小必须定义时给出,而且大多数情况下,数组空间的大小一旦确定后就不能更改
- 数组的空间必须是连续的,这就造成数组在内存中分配空间时必须找到一块连续的内存空间。所以数组不可能定义得太大,因为内存中不可能有那么多大的连续的内存空间,而解决这个问题的方法就是使用链表。
- 优点
集合和数组的优劣势和使用场景
最新推荐文章于 2022-11-10 20:56:18 发布