java常用集合總結


List

public interface List<E>extends Collection<E>
有序的 collection(也稱為序列),允許重復的元素。
常用實現類:

  • ArrayList:
    底層使用的是數組結構,特點:查詢速度快,增刪操作較慢,而且線程不同步.
    要保證同步,可以使用:List list = Collections.synchronizedList(new ArrayList());進行包裝,默認容量為10.
    常用方法:add,addAll,remove,indexOf,subList,contains,isEmpty

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    List<String> list = new ArrayList<String>();
    list.add("0");
    list.add("1");
    list.add("2");
    list.add("3");
    list.add("4");
    for (int i = 0; i < list.size(); i++) {
    list.remove(i);
    }
    System.out.println(list); //1,3

    容易忽略的方法:trimToSize()//修正容量大小,用多少,給多少,ensureCapacity(int minCapacity)//預設大小
    自定義ArrayList:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    /**
    * 簡單模擬ArrayList
    * @author admol
    */
    public class MyArrayList {
    private Object[] data;
    private int size;

    public MyArrayList() {
    this(10);
    }

    public MyArrayList(int i) {
    data = new Object[i];
    }

    /**
    * 返回擁有的元素數
    * @return
    */
    public int size() {
    return size;
    }

    /**
    * 獲取指定位置上的元素
    * @param i
    * @return
    */
    public Object get(int i) {
    return data[i];
    }

    /**
    * 添加元素
    * @param obj
    */
    public void add(Object obj) {
    //存儲空間已滿,需要擴容
    if (data.length == size) {
    Object[] temp = new Object[size + (size >> 1)];
    //數組復制:(被復制的數組,從第幾個元素開始復制,復制到的目標數組,粘貼的開始位置,需要復制元素個數)
    System.arraycopy(data, 0, temp, 0, size);
    data = temp;
    }
    //存儲空間未滿
    data[size++] = obj;
    }

    /**
    * 刪除指定位置的元素
    * @param i
    */
    public void remove(int i) {
    //例:共10個元素,要刪除的元素下標為3,實際上是從下標4開始向下標3復制粘貼(10-3-1)元素
    System.arraycopy(data, i + 1, data, i, size - i - 1);
    size--;
    }

    /**
    * 刪除指定元素
    * @param obj
    */
    public void remove(Object obj) {
    for (int i = 0; i < size; i++) {
    if (data[i].equals(obj)) {
    remove(i);
    return;
    }
    }
    }
    }
  • LinkedList
    使用雙向鏈表實現存儲,允許所有元素(包括 null)。非線程安全,要保證同步,可以使用List list = Collections.synchronizedList(new LinkedList());進行包裝,可以被當作堆棧和隊列來使用。

  • Vector
    也是一個有序集合,允許重復元素,並且線程安全.

Map

  • HashMap
    基於哈希表的 Map 接口的實現,存儲鍵值對,鍵是唯一的,允許使用 null 值和 null 鍵,非同步(除了非同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同),同步可以使用Map m = Collections.synchronizedMap(new HashMap(...));
    常用方法:
    1. 添加。 put(key,value):當存儲的鍵相同時,新的值會替換老的值,並將老值返回。如果鍵沒有重復,返回null。 void putAll(Map);
    2. 刪除。 void clear():清空 value remove(key) :刪除指定鍵。
    3. 判斷。 boolean isEmpty(): boolean containsKey(key):是否包含key boolean containsValue(value) :是否包含value
    4. 取出。 int size():返回長度 value get(key) :通過指定鍵獲取對應的值。如果返回null,可以判斷該鍵不存在。 當然有特殊情況,就是在hashmap集合中,是可以存儲null鍵null值的。
      Collection values():獲取map集合中的所有的值。
  • HashTable
    底層是哈希表數據結構,不可以存入null鍵null值,是線程同步的.
    Hashtable 的實例有兩個參數影響其性能:初始容量 和加載因子(默認.75)

Set

  • HashSet
    底層數據結構是哈希表(實際上是一個 HashMap 實例),允許使用 null 元素,唯一且無序,非線程安全.通過元素的hashcode和equals來保證元素的唯一性。如果元素的hashcode值相同,才會判斷equals是否為true; 如果元素的hashcode的值不同,不會調用equals。

Collections

提供對集合進行操作的一個包裝器,實現對集合的查找、排序、替換、 線程安全化(將非同步的集合轉換成同步的)等操作。常用方法:
Collections.max(list);//返回list中字典順序最大的元素。
int index = Collections.binarySearch(list,”zz”);//二分查找,返回角標。必須是有序的
Collections.fill();//可以將list集合中的所有元素替換成指定元素。
Collections.repalceAll(list,”要被替換的”,”替換的值”);//可以將list集合中的指定元素替換成指定元素。 Collections.reverse(); 反轉
Collections.reverseOrder(參數是比較器);//逆向反轉排序。倒序。。
Collections.shuffle(list);//隨機對list中的元素進行位置的置換。
synchronizedXXX(XXX);非同步集合轉成同步集合的方法:

Arrays

用於操作數組對象的工具類,里面都是靜態方法。
Arrays.asList:可以從 Array 轉換成 List。可以作為其他集合類型構造器的參數。
Arrays.binarySearch:在一個已排序的或者其中一段中快速查找。
Arrays.copyOf:如果你想擴大數組容量又不想改變它的內容的時候可以使用這個方法。
Arrays.copyOfRange:可以復制整個數組或其中的一部分。
Arrays.deepEquals、Arrays.deepHashCode:Arrays.equals/hashCode的高級版本,支持子數組的操作。
Arrays.equals:如果你想要比較兩個數組是否相等,應該調用這個方法而不是數組對象中的 equals方法(數組對象中沒有重寫equals()方法,所以這個方法之比較引用而不比較內容)。
Arrays.fill:用一個給定的值填充整個數組或其中的一部分。
Arrays.hashCode:用來根據數組的內容計算其哈希值(數組對象的hashCode()不可用)。
Arrays.sort:對整個數組或者數組的一部分進行排序。也可以使用此方法用給定的比較器對對象數組進行排序。
Arrays.toString:打印數組的內容。

關系圖

a


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM