一、集合與數組的區別
相同點:
都是用來存儲數據的。
不同點:
1.集合帶array的,底層由數組實現,還有一部分由其他方式(樹、鏈表等)實現。
2.數組大小固定,而集合沒有固定的大小,更方便存儲。
3.數組只能放一種類型,集合不考慮泛型可以存多種類型。
4.集合放基本類型是通過裝箱拆箱(包裝類與基本數據類型的轉換)來實現的。(寫泛形的時候不能用int,而要用Integer)
二、幾種常用集合之間的關係
在這裡插入圖片描述
Map接口自成一系,是以鍵值對(Key,Value)方式存儲數據的,屬於雙列集合。
Set接口的實現類: HashSet、LinkedHashSet、TreeSet。
List接口的實現類:ArrayList、LinkedList、Vector(線程安全)。
Queue接口的實現類 : LinkedList、PriorityQueue。(沒怎麼用過,混個臉熟)
Map接口的實現類:HashMap、TreeMap、Hashtable(線程安全)。
三、每種集合的性質
3.1Collection接口(單列)
Collection接口的常用方法:
<code>add(T t) //添加指定元素
remove(T t) //刪除指定元素
isEmpty() //集合是否為空
iterator() //獲得迭代器(Iterator類型),一般用於遍歷
size() //獲得元素的個數
contains(T t) //是否包含某元素/<code>
3.1.1.List 有序,可重複
List接口的常用方法
<code>add(int index, T t) //向指定位置添加元素
remove(int index) //刪除指定元素
get(int index) //獲取指定位置的元素
set(int index, T t) //修改指定位置的元素
indexOf(T t) //獲取指定元素的位置/<code>
ArrayList 底層數據結構是數組,查詢快,增刪慢。
ArrayList的常用方法都是從List繼承來的,就不多說了。
LinkedList 底層數據結構是鏈表,查詢慢,增刪快。
LinkedList 的常用方法:
<code>getFirst() //獲取第一個元素
getLast() //獲取最後一個元素
offer(T t) //在最後位置追加元素
offerFirst(T t) //在開頭位置追加元素
offerLast(T t) //在最後位置追加元素
removeFirst() //刪除第一個元素
removeLast() //刪除最後一個元素/<code>
Vector 底層數據結構是數組,線程安全,效率低。
使用方法和ArrayList基本一樣。
3.1.2.Set 不可重複
方法:常用的都是從Collection繼承到的,就輕鬆了許多。
HashSet (無序,唯一)
底層數據結構是哈希表。
如何保證唯一:hashCode()和equals()
LinkedHashSet(有序,唯一)
底層數據結構是鏈表和哈希表。鏈表保證有序,哈希表保證唯一。
TreeSet(有序,唯一)
底層數據結構是紅黑樹。
1.如何排序(add()方法的重載):
自然排序(無參add()調用Comparable的compareTo()方法)
定製排序 (add(? extends Comparator)調用類實現的compare()方法)
注:裝載時若自然排序無法進行排序會報錯,所以對裝進集合的類實現Comparator接口進行自定義排序
2.如何保證唯一:
根據比較的返回值是否為0來決定。
3.1.3.Queue 有序(FIFO先進先出)
PriorityQueue 有序(定製排序、自然排序(也就是說不是所謂的FIFO),我用的少,所以不是特別瞭解)
3.2Map接口(雙列)3.1.
<code>put (K key,V value):把鍵與值添加到Map集合中
remove (K key):刪除key對應的值
get(K key):根據指定的鍵,獲取對應的值
containKey(K key):判斷是否包含指定的鍵
entrySet() :返回Map.Entry型對象,用於遍歷。(entry.getKey()/entry.getValue())
keySet(K key):獲取Map集合中所有的Key,存儲到set集合中(用於遍歷)
values(V value) :獲取Map集合中所有的Value,存儲到Collection集合中(用於遍歷)/<code>
3.2.1HashMap
HashMap的常用方法都繼承自Map接口,就不細說了。HashMap是最常用的鍵值對存儲容器。
3.2.2.TreeMap
構造器:
TreeMap()//創建一個空TreeMap,keys按照自然排序
TreeMap(Comparator comparator)//創建一個空TreeMap,按照自定義的comparator排序。
3.2.3.Hashtable(線程安全)
與HashMap的異同:
同:Hashtable和HashMap使用方法基本一致。
異:HashMap線程不安全,而Hashtable是線程安全的;HashMap的K和V都可以為null,而Hashtable的K,V都不能為null。
四、總結
1.沒有其他要求時,最常用ArrayList、HashMap;
2.不能重複時,用HashSet;
3.需要線程安全時,用Vector、Hashtable。
原文鏈接:https://blog.csdn.net/weixin_43584835/article/details/104074514
閱讀更多 學java的小亂 的文章