Java集合類的使用


集合框架有何好處

集合彌補了數組的缺陷,他比數組更靈活更實用,可大大提高軟件的開發效率,而且不同的集合可使用與不同場合

數組和集合的區別

  1. 數組長度固定,集合長度可以動態改變
  2. 定義數組時必須指定元素類型,集合默認所有元素都是Object
  3. 無法直接獲取數組中實際元素的個數,集合可以通過size()直接獲取元素個數
  4. 集合有多種實現方式和不同的適合場合,而不像數組僅采用分配連續空間方式。
  5. 集合以接口,類的形式存在,具有面向對象的三大特征,提高了軟件的開發效率

Hashtable和HashMap的異同

實現原理、功能相同,可以互用
主要區別

  • Hashtable繼承Dictionary類,HashMap實現Map接口
  • Hashtable線程安全,HashMap線程非安全
  • Hashtable不允許null值,HashMap允許null值

泛型集合的好處

  • 嚴格限制存入元素的數據類型,從集合中取出元素時無需進行強制類型轉換,避免了ClassCastException異常。

Collections算法類

  1. Collections和Collection不同,前者是集合的操作類,后者是集合接口
  2. Collections提供的常用靜態方法
  3. sort():排序
  4. binarySearch():查找
  5. max()\min():查找最大\最小值

集合類有哪些

  • Collection(接口)(由List和Set兩部分組成)

  • List(接口)

    • LinkedList(類)
    • ArrayList(類)
    • Vector(類)
    • stack(類)
  • Set接口

  • Map接口

    • Hashtable(類)
    • HashMap(類)
    • WeakHashMap(類)

如何使用集合類

  1. 如果涉及到堆棧、隊列等操作,應當考慮List,對於需要快速插入,刪除元素,應該使用LinkedList,如果需要快速隨機訪問元素,應該使用ArrayList
  2. 哈希表的操作,作為Key的對象要正確復寫equals和hashCode方法
  3. 盡量返回接口而非實際的類型,如返回List而非ArrayList,這樣如果將來要將ArrayList換成LinkedList時,客戶端代碼不用改變
  4. List可以有類似數組的下標操作,且允許有相同的元素存在;Map是以鍵值對(KeyValue)的形式存在,不能存在相同的鍵

常用集合類

  1. ArrayList類:
    ArrayList實現可變大小的數組,長度隨着元素的增加而變化,而且可以存在重復的元素
  2. HashMap類:
    允許null,即null key,null value。且存在的形式是key-value形式,不允許有key重復

Collection的使用

Collection接口是什么

  • Collection接口是可以理解成動態的數組、集合,和數組類似,但不同的是集合可以任意擴充大小
  • Collection是最基本的接口,Java SDK提供的類都是繼承自Collection的子接口,例如“List”、“Set”

Collection接口特點

  • 性能高
  • 易擴展
  • 易修改

List接口的使用

List接口的特點

  • List接口可以存放任意的數據,且在接口中,內容可以重復
  • List中提供了高效的插入和移除多個元素的方法

List常用(實現)子類

  • ArrayList(實現類)
    例:List list = new ArrayList<>();
  • Vector(實現類)
    例:List list = new Vector<>();

ArrayList和Vector區別

|ArrayList Vector
推出時間 JDK1.2后
性能 異步處理,性能高
線程安全 非線程安全

Set的使用

Set接口的特點

Set接口可以存放任意的數據,且在接口中,數據不可以重復(注意和List進行區別)

Set接口常用子類

  • HashSet
    Set sets = new HashSet<>();
  • TreeSet
    Set sets = new TreeSet<>();

HashSet和TreeSet的區別

  • HashSet與TreeSet都是間接實現了Set接口,同樣擁有add、remove等方法
  • HashSet是無序存放的、而TreeSet實現是有序存放(ASCII順序存放)

Map的使用

Map的特點

  • Map接口存放數據是以鍵值對的形式存放,例如:

    key -> value
    "name" -> "尼古拉斯趙四"
    "age" -> "33"

  • 鍵(key)的類型要一致,值(value)的類型也要一致。

Map常用實現類(實現類的方法和List、Set的方法不一樣)

  • HashMap

    Map<String,String> maps = new HashMap<>();
    maps.put("name","詹姆斯劉能");
    maps.put("age","24");

List接口常用方法

  • boolean add(Object o) 在列表的末尾順序添加元素,起始索引位置從0開始
  • void add(int index,Object o) 在指定的索引位置添加元素。索引位置必須介於0和列表中元素個數之間
  • int size()返回列表中的元素個數
  • Object get(int index)返回指定索引位置處的元素。取出的元素是Object類型,使用前需要進行強制類型轉換
  • boolean contains(Object o) 判斷列表中是否存在指定元素
  • boolean remove(Object o) 從列表中刪除元素
  • Object remove(int index) 從列表中刪除指定位置元素,起始索引位置從0開始

LinkedList常用方法

  • void addFirst(Object o) 在列表的首部添加元素
  • void addLast(Object o) 在列表的末尾添加元素
  • Object getFirst() 返回列表中的第一個元素
  • Object getLast() 返回列表中的最后一個元素
  • Object removeFirst() 刪除並返回列表中的第一個元素
  • Object removeLast() 刪除並返回列表中的最后一個元素

Map接口常用方法

  • Object put(Object key, Object val) 以“鍵-值”對的方式進行存儲
  • Object get(Object key) 根據鍵返回相關聯的值,如果不存在指定的鍵,返回null
  • Object remove(Object key) 刪除由指定的鍵映射的“鍵-值對”
  • int size() 返回元素個數
  • Set keySet() 返回鍵的集合
  • Collection values() 返回值的集合
  • boolean containsKey(Object key) 如果存在由指定的鍵映射的“鍵-值對”,返回true

迭代器iterator的使用(接口)

  • iterator自帶常用方法

    • hasNext:如果仍有元素可以迭代,則返回true

    • next:返回迭代下一個元素

    • remove:從迭代器指向的collection中移除迭代器返回的最后一個元素(可選操作)

      Set sets = maps.keySet();
      Iterator iterator = sets.iterator();
      while(iterator.hasNext()){
      System.out.println("key=" + iterator.next());
      }

    Collection collection = maps.values();
    Iterator iterator = collection.iterator();
    while(iterator.hasNext()){
    System.out.println("value=" + iterator.next());
    }

結尾


免責聲明!

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



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