最近整天面試廠商的人,我總在問一個(gè)很簡單的問題,就是集合分為哪幾種梁厉,都什么區(qū)別,怎么用蝗肪。答的水平參差不齊。所以我想整體的寫一寫蠕趁,系統(tǒng)的來學(xué)習(xí)一下常用的薛闪、集合相關(guān)的知識(shí)點(diǎn)。
java集合有哪些
首先需要明確的是:集合有3個(gè)接口
- Iterator
- Collection
- Map
這是并列的概念俺陋。
可以看一下類圖:
http://www.runoob.com/java/java-collections.html
要明確如下這些概念的層次關(guān)系
Collection
- List
- ArrayList
- LinkedList
- Vector
- Stack
- Set
- HashSet
- TreeSet
- Queue
Map
- HashMap
- LinkedHashMap
- TreeMap
- WeakHashMap
- IdentityHashMap
- HashTable
前四個(gè)都是繼承AbstractMap豁延,實(shí)現(xiàn)了Map接口,代碼里都是
xxx extends AbstractMap<K,V> implements Map<K,V>
但是HashTable繼承Dictionary腊状,實(shí)現(xiàn)了Map接口诱咏,所以這是一個(gè)很重要的區(qū)別。
List是一個(gè)接口
List.java
public interface List<E> extends Collection<E> {
int size();
boolean isEmpty();
boolean contains(Object o);
Iterator<E> iterator();
...
...
}
ArrayList是一個(gè)類
ArrayList.java
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
}
HashMap和HashTable的區(qū)別
HashTable為什么是線程安全的
public synchronized int size() {
return count;
}
Java中Collection和Collections的區(qū)別
- java.util.Collection 是一個(gè)接口缴挖。它提供了對(duì)集合對(duì)象進(jìn)行基本操作的通用接口方法袋狞。Collection接口在Java 類庫中有很多具體的實(shí)現(xiàn)。Collection接口的意義是為各種具體的集合提供了最大化的統(tǒng)一操作方式映屋。
- java.util.Collections 是一個(gè)類苟鸯。它包含有各種有關(guān)集合操作的靜態(tài)多態(tài)方法。此類不能實(shí)例化秧荆,就像一個(gè)工具類倔毙,服務(wù)于Java的Collection框架。
public interface Collection<E> extends Iterable<E> {
int size();
boolean isEmpty();
...
...
}
public class Collections {
// Suppresses default constructor, ensuring non-instantiability.
private Collections() {
}
...
public static <T extends Comparable<? super T>> void sort(List<T> list) {
list.sort(null);
}
...
...
}