Set中不能有重复元素,通过equals方法判断
HashSet : 为快速查找而设计的Set,存入的元素必须定义hashCode()方法,可以有一个null值
TreeSet :底层为树结构(红黑二叉树),内部有序.存入的元素必须实现comparable接口,不能有null值
LinkedHashSet : 具有HashSet的查找速度,同时按照插入的顺序存储,可以有一个null值
要将自定义的类对象放入Set或者Map时应该考虑是否需要重写其equals()方法和hashCode方法,如还需实现comparable接口,equals方法与compareTo方法结果应该一致
SortedSet : 接口,唯一实现类---TreeSet
常用方法
comparator() : 返回当前Set的comparator,或者null(表示自然顺序)
first(),last()方法:返回第一个和最后一个元素
SortedSet subSet(fromElement, toElement)
SortedSet headSet(toElement)
SortedSet tailSet(fromElement)
Queue 队列 (接口)仅有LinkedList 和 PriorityQueue 两个实现
方法
抛出异常
返回特殊值
添加
add
offer
移除
remove
poll
查看
element
peek
其中添加返回Boolean,移除和查看返回元素
PriorityQueue 内部的优先级实现也是通过compareTo实现的
双端队列:LinkedList 可以在队列任意一端添加或删除元素
Map
subMap()只有TreeMap才有
WeakHashMap : 弱键映射,允许释放映射所指向的对象.如果处映射外没有引用指向对象,则该对象可以被回收
ConcurrentHashMap : 线程安全的Map,不涉及同步加锁
IdentityHashMap :使用==代替equals()对键进行比较的三列映射
LinkedHashMap : 默认按照插入顺序存储,可以通过调用构造器LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)
将顺序变为LRU(Leas-Rencently-Used,最近最少使用),可以用于定期垃圾清理,其中loadFactor为加载因子,表示当前的最大容量,最大容量等于第一个大于initialCapacity
的2的n次方的值乘以加载因子,加载因子越大表示填充越紧密,查找速度会变;而太小的话会浪费空间,默认为0.75;accessOrder为false表示按插入顺序存储,true表示LRU
默认的eqals比较对象的地址,重写equals方法
public booleanequals(Object obj){return (obj instanceof X) && ((X)obj).a == this.a;
}//其中instanceof既判断了obj是否是X的实例也判断了其是否为null
Map存储原理:内部可以看作一个list数组,通过hashCode可以得到key的唯一hash值,通过该值计算处对应数组下标,如果对应下标处值为null则新建一个list,然后将该键值对放入list;如果不为null则遍历list查看是否有相同的key(依据equals),如果存在则将对应的oldValue替换成value,否则直接将键值对添加到list
Map中查找元素的过程:首先利用hashCode()计算key的hash值得到数组下标,如果该下标处值为null则返回null,否则取出对应list,遍历查找对应key的键值对,如果找到了返回该键值对的value,否则返回null
散列表中的“槽位”通常称为“桶位”(bucket),为使散列分布均匀,桶的数量通常使用2的整数次方,并且用掩码代替除法
工具类 Collections
实用方法
max(),min()
reverse(List list) 逆转所有元素的次序
rotate(List list , int distance) 将所有元素向后移动distance个位置,末尾的元素循环到前面来
shuffle(List list ,(Random rand)) 将所有元素顺序打乱可以用指定随即源
sort(List list (Comparator comp)) 按照元素的自然顺序或者提供的顺序排序
swap(List list ,int i ,int j) 交换指定表中位置i和位置j的元素,通常比自己写的代码快!!!!
disjoint(Collection c1,Collection c2) 当两个集合中没有任何元素相同时返回true
frequency(Collection c ,Object o) 返回集合中等于o的元素个数
unmodifiableXXX(? extends XXX) 将容器设置为不可变
快速报错
防止多个进程同时修改一个容器的内容等使容器不稳定的情况,例如在获取到迭代器后又添加元素再进行迭代的情况