Java集合的常見用法你知道多少?


Java集合的常見用法你知道多少?


一、集合與數組的區別

相同點:

都是用來存儲數據的。

不同點:

1.集合帶array的,底層由數組實現,還有一部分由其他方式(樹、鏈表等)實現。

2.數組大小固定,而集合沒有固定的大小,更方便存儲。

3.數組只能放一種類型,集合不考慮泛型可以存多種類型。

4.集合放基本類型是通過裝箱拆箱(包裝類與基本數據類型的轉換)來實現的。(寫泛形的時候不能用int,而要用Integer)

二、幾種常用集合之間的關係

在這裡插入圖片描述

Java集合的常見用法你知道多少?

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


分享到:


相關文章: