一、总体框架:
两个接口:Collection接口和Map接口
Set中存储元素无序,且唯一,相当于数学中的集合
Map接口中主要存储键-值对
二、Collection接口主要方法
注:1、容器类对象在调用remove()、contains()等方法需要对对象进行比较时,会涉及到equals()和hashCode()方法;
对于自定义的类型,需要重写equals()方法和hashCode()方法,以实现对象的相等规则。(相等的对象需要有相等的hashCode)
2、iterator()方法返回一个实现了Itarator接口的对象,Itarator对象称为迭代器。
Itarator接口提供方法:
3、Set接口
Set接口两个容器类HashSet和TreeSet
对于HashSet只能通过add()加入不同元素,如果相同add()方法会返回false,且插入失败;如果不同插入成功,add()返回true。
Set接口方法如下:
4、List接口:有序,可重复
List接口有两个容器类ArrayList和LinkedList
LIst接口公共方法如下:
5、List的常用算法:
类java.util.Collections中提供了一些基于List的的常用方法:
这些算法实现这些容器中对象的比较,是因为这些容器类实现了java.lang.Comparable接口的public int comparable(Object obj)方法
6、总结
Array:读快改慢
Linked:改快读慢
Hash:两者之间
二、Map接口:用来存储键-值对
Map接口两个实现的容器类HashMap、TreeMap,Map接口主要方法如下:
注:Dictionary类有一个子类HashTable,该类与HashMap差别不大,主要差别如下:
(1)HashTable是线程安全的,而HashMap不是
HashMap要想实现线程安全:
1.1、Collections类中有一个synchronizedMap()方法返回一个同步版本的HashMap用于多线程的环境;
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) {
return new SynchronizedMap<K,V>(m);
}
1.2、ConcurrentMap接口和它的一个实现类ConcurrentHashMap
Java5中新增了ConcurrentMap接口(在java.util.concurrent包中)和它的一个实现类ConcurrentHashMap。ConcurrentHashMap提供了和Hashtable以及SynchronizedMap中所不同的锁机制。Hashtable中采用的锁机制是一次锁住整个hash表,从而同一时刻只能由一个线程对其进行操作;而ConcurrentHashMap中则是一次锁住一个桶。ConcurrentHashMap默认将hash表分为16个桶,诸如get,put,remove等常用操作只锁当前需要用到的桶。这样,原来只能一个线程进入,现在却能同时有16个写线程执行,并发性能的提升是显而易见的。