对于集合的一般情况都如下所示:
- ArrayXxx:底层数据结构是数组,查询快,增删慢
- LinkedXxx:底层数据结构是链表,查询慢,增删快
- HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
- TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序
例如:
ArrayList和LinkedList区别:
ArrayList类实现了可变的数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问,缺点是向指定的索引位置插入对象或删除对象的速度较慢
LinkedList类采用链表结构保存对象。这种结构的优点便是便于向集合中插入和删除对象。需要向集合中插入和删除对象时,使用LinkedList类实现的List集合的效率较高;但是对于随机访问集合中的元素,使用LinkedList类实现List集合的效率较低
HashMap和Hashtable区别:
Hashtable是一个线程安全的map实现,但HashMap是线程不安全的实现,故HashMap的性能较高
Hashtable不允许使用null作为key和value,如果试图将null放入Hashtable,会报NullPointException异常;但HashMap可放入null作为key或value
HashMap和TreeMap区别:
HashMap类是基于哈希表的Map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键但是必须保证键的唯一性。HashMap通过哈希表对其内部的映射关系进行快速查找。此类不保证映射的顺序,特别是它不保证该顺序恒久不变
TreeMap类不仅实现了Map接口还实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定的顺序。但在添加、删除和定位映射关系时,TreeMap比HashMap类性能差。由于TreeMap实现的Map集合中的映射关系是根据键对象按照一定的顺序排列的,因此不允许键对象时null
- 总的来说,建议使用HashMap实现Map集合,因为HashMap实现Map集合添加和删除映射关系的效率更高。如果希望Map集合中的对象也存在一定的顺序的话就使用TreeMap实现Map集合
HashSet和reeSet区别:
HashSet类实现Set接口,由哈希表支持。它不保证Set的迭代顺序,特别是它不保证该顺序恒久不变。此类允许使用null元素
TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口(注意Collection位于java.lang.Object包),因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较比较器递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序