ArrayList/LinkedList/Vector
- ArrayList 是一个可改变大小的数组.当更多的元素加入到ArrayList中时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组.
- LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList.
- Vector 和ArrayList类似,但属于强同步类。如果你的程序本身是线程安全的(thread-safe,没有在多个线程之间共享同一个集合/对象),那么使用ArrayList是更好的选择。Vector和ArrayList在更多元素添加进来时会请求更大的空间。
- Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%.
- 而LinkedList 还实现了Queue 接口,该接口比List提供了更多的方法,包括 offer(),peek(),poll()等.
HashMap/HashTable
- HashTable是Dictionary的子类,HashMap是Map接口的一个实现类; HashTable的方法是同步的,而HashMap中的方法在缺省情况下是非同步的;
- 在HashMap中,null可以作为键值,但只能有一个。
HashMap和HashSet的关系
- HashSet实现了Set接口,他不允许集合中有重复的值。在将对象存入HashSet之前,先要重写确保对象重写equals()和hashCode()方法,如果没有重写这个方法,将会默认实现。HashSet使用public boolean add(Object o)方法用来在Set中添加元素,当元素值重复时则会立即返回false,如果成功添加的话会返回true。
- HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许重复的键。HashMap使用public Object put(Object Key,Object value)方法用来添加元素。
以上就是我对常用集合的简单理解,如有不对,请及时指正。