Collections Collection
Collections是针对集合类的一个包装类,它提供一系列静态方法,以实现对各种集合的搜索、排序、线程安全化等操作,其中大多数方法都是用来处理线性表。Collections类不能实例化,如同一个工具类,服务于Collection框架。若在使用Collections的方法时,对应的Collection的对象为null,则这些方法都会抛出NullPointerException。
Collection是一个集合接口。它提供的对集合对象进行基本操作的通用接口方法。实现该接口的类主要有List和Set,该接口的设计目标是为各种具体的集合提供最大化的统一的操作方式。
HashMap HashTable
HashMap | HashTable |
是HashTable的轻量级实现 |
|
允许存在一条null键值的记录 | 不允许有null键值 |
非线程安全,需要提供额外的同步机制 | 线程安全,支持线程同步 |
实现Map interface | 继承自Dictionary |
Iterator | Enumeration |
Hash默认数组大小16,扩容每次都是2的n次方 | Hash数组默认大小11,扩容方式old×2+1 |
使用hashCode作为hash值 |
|
HashMap LinkedHashTable TreeMap
HashMap使用最多,无序,多用于 插入、删除、定位元素
LinkedHashMap 是HashMap的一个子类,输出顺序和输入顺序相同,此外,它还可以按读取顺序来排列
TreeMap 实现了SortMap接口,按键排序,用于自然顺序或自定义顺序遍历键
HashMap WeakHashMap
HasnMap采用强引用方式,即当HashMap中的key没有被外部引用时,只有在这个key从HashMap中删除后,才可以被垃圾回收器回收
WeakHashMap 采用弱引用方式,即只要WeakHashMap中的key不在被外部引用,它就可以被垃圾回收器回收。
注:
使用自定义类作为HashMap的key时,需要注意以下几个问题
1、如果想根据对象的相关属性来自定义对象是否相等的逻辑,此时就需要重写equals()方法,而且必须重写hashCode方法。
2、当自定义类的多项作为HashMap(HashTable)的key时,最好把这个类设计为不可变类。
3、从HashMap的工作原理可以看出,如果两个对象相等,那么这两个对象有着相同的hashCode,反之则不成立。
欢迎各位讨论指教