Collection:List,Set,Queue;Map;Iterator(依附于Collection对象,主要用于遍历Collection集合中的元素)
foreach(遍历数组和集合),Iterator修改迭代变量没有意义,集合不会被改变
Set:HashSet,LinkedHashSet,TreeSet,EnumSet(都是线程不安全的)
HashSet:除了排序外都比TreeSet要好
LinkedHashSet:HashSet的子类,使用链表维护元素的插入顺序(如果没有重写compareTo方法),遍历比HashSet快,其他比HashSet慢(链表开销)
TreeSet:调用compareTo方法使元素按升序排列(红黑树算法),compareTo返回0则认为相等
EnumSet:性能最好,但只能保存同一个枚举类的枚举值作为集合元素
List:ArrayList,LinkedList,Vector
ArrayList:数组形式实现,随机访问(get)性能好
LinkedList:链表形式实现,迭代器遍历,插入删除性能好,此外还提供了双端队列和栈的功能
Vector:以数组形式实现,线程安全但很少用
Map:HashMap,LinkedHashMap,HashTable,TreeMap,EnumMap
HashMap:性能比HashTable好,线程不安全,(判断key是否一样通过equals()和hashCode),推荐使用,底层由数组和链表实现,当一个map填满了75%(负载因子)的bucket时候,和其它集合类(如ArrayList等)一样,将会创建原来HashMap大小的两倍的bucket数组,来重新调整map的大小,并将原来的对象放入新的bucket数组中;JDK1.8中如果链表长度大于8会把链表转化为红黑树。
HashTable:线程安全,不允许加入null,(判断key是否一样通过equals()和hashCode)
LinkedHashMap:HashMap的子类,使用双向链表维护元素的插入顺序,性能略低于HashMap,迭代遍历快
TreeMap:调用compareTo方法使key按升序排列,compareTo返回0则认为key相等
EnumMap:性能最好,但只能保存同一个枚举类的枚举值作为key
size()
或 isEmpty()
)的实现更加困难,因为这些方法要求一次获得许多的锁,并且还存在返回不正确的结果的风险。