本文共 1217 字,大约阅读时间需要 4 分钟。
数组
- 大小类型固定、性能高效
- 支持边界值检查
- length只能反映最大容量,不能反映使用的大小
- java.util.Arrays提供了fill、set、sort、binarySearch、equals、hashCode、toString、parallelPrefix、copyOf等方法
Collection
List
- ArrayList(*随机访问效率高)
- LinkedList(插入效率高)
线程安全:
- vector(不推荐使用)
- CopyOnWriteArrayList
Set
- EnumSet
- SortedSet:TreeSet(线程不安全)、ConcurrentSkipListSet(线程安全)
- HashSet(线程不安全)、CopyOnWriteArraySet(线程安全)
Queue
Map
- SortedMap:TreeMap(线程不安全,红黑树实现)、ConcurrentSkipListMap(线程安全,跳表实现)
- HashMap(线程不安全,散列表加开链法)、LinkedHashMap、ConcurrentHashMap(线程安全,分段锁)
- HashTable(线程安全)
处理细节注意事项
- 只要重写equals,就必须重写hashCode
- 使用Map的方法KeySet()/values()/entrySet()返回集合对象时,不可以对其进行添加元素操作,否则会抛出UnsupportedOperationException异常
- Collections类返回的对象,如:emptyList()/singletonList()等都是immutable list,不可对其进行添加或者删除元素的操作。
- ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException异常。
- 在subList场景中,高度注意对父集合元素个数的修改,会导致子列表的遍历、增加、删除均会产生ConcurrentModificationException异常。
- 使用集合转数组的方法,必须使用集合的toArray(T[] array),传入的类型完全一样的数组,大小就是list.size()。
- 使用工具类Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方法,它的add/remove/clear方法会抛出UnsupportedOperationException异常
- 不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。
源码阅读
- java.util.LinkedList
- java.util.ArrayList
- java.util.TreeSet
- java.util.HashSet
- java.util.TreeMap
- java.util.HashMap
转载地址:http://hnoji.baihongyu.com/