java-學習篇-集合

簡介

所有的集合類都位於java.util包下,後來爲了處理多線程環境下的併發安全問題,Java 5還在java.util.concurrent包下提供了一些多線程支持的集合類。
Java的集合類主要由兩個接口派生而出:CollectionMap,是Java集合框架的根接口,這兩個接口又包含了一些子接口或實現類。

Collection

子接口如下所示:

  1. Set(無序,元素不可重複)
  2. List(有序,元素可以重複)
  3. Queue(隊列)

Collection接口定義的方法:

// java.util
public interface Collection<E> extends Iterable<E>

int size();
boolean isEmpty();
boolean contains(Object o);
// 返回Iterator對象,用於遍歷集合裏的元素。
Iterator<E> iterator();
// 將集合轉換成數組
Object[] toArray();
Iterator<E> iterator();
boolean add(E e);
boolean remove(Object o);
boolean containsAll(Collection<?> c);
boolean addAll(Collection<? entends E> c);
// 取交集
boolean retainAll(Collection<?> c);
void clear();

遍歷集合

  1. Java 8使用Lambda表達式來遍歷集合元素(Iterable接口新增forEach默認方法)
  2. Iterator(迭代器)
  3. Java 5提供foreach

Iterator
Iterator僅用於遍歷集合,Iterator本身並不提供盛裝對象的能力。如果需要創建Iterator對象,則必須有一個被迭代的集合。

// java.util
public interface Iterator<E>

// 如果被迭代的集合元素還沒有被遍歷完,則返回true
boolean hasNext();
// 返回集合裏的下一個元素
E next();
default void remove() {
    throw new UnsupportedOperationException("remove");
}
// java 8爲Iterator新增的默認方法
default void forEachRemaining(Consumer<? super E> action) {
    Objects.requireNonNull(action);
    while (hasNext())
        action.accept(next());
}

**注:**Iterator迭代訪問Collection集合元素時,Collection集合裏的元素不能被改變。

List

元素有序、可重複的集合。

public interface List<E> extends Collection<E>

ArrayList

線程不安全

LinkedList

LinkedList與ArrayList、ArrayDeque的實現機制完全不同,後者內部以數組的形式來保存集合中的元素,隨機訪問有較好性能;而LinkedList內部以鏈表的形式來保存元素,插入、刪除元素時性能比較好。

Vector

線程安全,比ArrayList的性能低。子類Stack

Set

HashSet

LinkedHashSet

SortedSet(接口)

TreeSet

EnumSet

Queue

PriorityQueue

Deque(接口)

雙端隊列。

ArrayDeque

ArrayList和ArrayDeque兩個集合類的實現機制基本相似,底層都採用一個動態的、可重分配的Object[]數組來存儲集合元素,當集合元素超出了該數組的容量時,系統會在底層重新分配一個Object[]數組來存儲集合元素。

Map

Map保存的每項數據都是key-value對。Map中key是不可以重複的,key用於標識集合裏的每項數據。

HashMap

  • 線程不安全
  • 可以使用null作爲key或value。

LinkedHashMap

父類爲HashMap

SortedMap(接口)

實現類TreeMap。

TreeMap

TreeMap就是一個紅黑樹數據結構,每個key-value對即作爲紅黑樹的一個節點。

EnumMap

Hashtable

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章