JAVA通幽(二)容器類
阿新 • • 發佈:2018-12-15
前言
本章將講解集合的基本概念
基礎
1.陣列的優劣
優勢:是一種簡單的線性序列,可以快速的訪問陣列元素,效率高。如果從效率和型別檢查的角度講,陣列是最好的。
劣勢:不靈活。陣列的容量需要事先定義好,無法隨著需求的變化而擴容。
2.容器類
綜上所述,我們需要一個更為強大的容器來儲存所需要的資料物件集合,基本容器類如下所示:
為了更好的學習容器,這裡先行說一下泛型的概念:
泛型是jdk1.5之後新增加的特性,它可以幫助我們建立型別安全的集合,在使用了泛型的集合中,遍歷無需進行強制轉換,泛型簡單的理解就是標記本集合存放的資料型別。如 LIst<String> list = new ArrayList<String>(); 定義集合中<String>就是一個泛型,它告訴編譯器,我宣告的LIst集合存放的是String型別的物件。
3.Collection容器類的常用方法(ArrayList為例)
Collection集合的介面有兩個子介面(List和Set),基本方法大致相同,這裡我們以List的一個實現類:ArrayList進行講解
- public boolean add(E e):表示向集合中按順序新增元素
- public void add(int index,E element):表示向集合指定索引處新增元素,使用該方法注意陣列越界(0=<index<=集合長度),還需要注意的是,向同一索引處新增不同的值,最後一個語句的值才能真正新增至指定索引,其他值從尾部向上排列顯示
- public boolean addAll(Collection<? extends E> c):表示向集合中新增另外一個集合,需注意型別一致或繼承關係
- public boolean addAll(int index,Collection<? extends E> c):表示向集合指定索引處中新增另外一個集合,注意陣列越界
- public void clear():表示清空該集合,移除所有元素。
- public boolean contains(Object o):判斷集合中是否包含某個元素,底層需元素物件的equals方法支援
- public int indexOf(Object o):從前往後判斷物件在集合中的索引位置,底層需元素物件equals方法支援
- public int lastIndexOf(Object o):從後往前判斷物件在集合中的索引位置,底層需元素物件equals方法支援
- public E get(int index):表示從集合中獲取指定索引的元素,注意陣列越界;該方法Set實現類中沒有
- public E set(int index,E element):替換某個下標位置的元素值
- public boolean isEmpty():判斷集合是否為空,即size()為0
- public int size():返回集合的長度值
- public E remove(int index):表示從集合中移除某個索引下的元素
- public boolean remove(Object o):表示從集合中移除某個元素
4.Map容器類的常用方法(HashMap為例)
Map集合,儲存的是鍵值對,即key:value的形式如{1=aa, 2=bb},這裡我們以Map的一個實現類:HashMap進行講解
- public V put(K key,V value):用於向Map集合中加入元素,以key-value形式儲存
- public V get(Object key):獲取Map集合中指定key的value值
- public Set<K> keySet():用於獲取Map集合中的key值集合,該集合為Set型別
- public Set<Map.Entry<K,V>> entrySet():獲取Map物件的鍵值對集合,該集合為Set型別
要點:
1.List和Set的區別
- Set其中的值不允許重複,無序的資料結構
- List其中的值允許重複,因為其為有序的資料結構
2.ArrayList和LinkedList的區別
- ArrayList是實現了基於動態陣列的資料結構,LinkedList基於連結串列的資料結構
- 對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標
- 對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料
3.HashSet和TreeSet的區別
- TreeSet 是二差樹實現的,Treeset中的資料是自動排好序的,不允許放入null值。
- HashSet 是雜湊表實現的,HashSet中的資料是無序的,可以放入null,但只能放入一個null,兩者中的值都不能重複,就如資料庫中唯一約束。
- HashSet要求放入的物件必須實現HashCode()方法,放入的物件,是以hashcode碼作為標識的,而具有相同內容的 String物件,hashcode是一樣,所以放入的內容不能重複。但是同一個類的物件可以放入不同的例項 。
4.HashMap和Hashtable的區別
- HashMap中鍵值 允許為空 並且是非同步的
- Hashtable中鍵值 不允許為空 是同步的
- 繼承不同,但都實現了Map介面