java學習之集合家族2
集合體系
一.數據結構
- List集合儲存數據結構
<1>堆棧結構
特點:先進後出
<2>隊列結構
特點:先進先出
<3>數組結構
特點:查詢快,增刪慢
<4>鏈表結構
特點:增刪快,查詢慢
二.List接口
Java.util.List 接口(集合)extends Collection 接口
List接口的特點:
允許存儲重復元素
是一個有序集合(存儲元素的順序和取出元素的順序一致)存
有索引,包含一些帶索引的特有方法(有三種遍歷方式:叠代器,增強for,普通 for)
帶索引的特有方法:
- add(int index, E e);在指定索引上添加元素
- E remove(int index); 移除並返回指定索引處的元素
- E set(index int , E e);修改並返回指定索引上的元素
- E get(int index); 返回列表中指定位置的元素;
註意:
操作索引方法時,一定要避免索引越界異常
IndexOutOfBoundException:索引越界異常,集合會報
StringIndexOutOfBoundException:字符串索引越界異常
ArrayIndexOutOfBoundException:數組索引越界異常
三.ArrayList<E>集合
特點:
底層是一個數組結構,查詢快,增刪慢;
有序集合
允許存儲重復數據
四.Vector集合
Jdk1.0出現,單線程,線程安全集合
五.LinkedList<E> 集合
Java.util.LinkedList<E> 集合implements List<E>
特點:
底層是一個雙向鏈表結構,查詢慢,增刪快;
存取是有序的
允許重復元素
LinkedList特有的方法:
增加的方法:
- void addFirst(E e) 將指定元素插入到此列表的開頭
- void push(E e) 將元素插入此列表的開頭。此方法等效於addFirst(E e)
- void addList(E e) 將指定元素添加到列表的結尾,相當於add(E e);
刪除的方法:
- E removeFirst();移除並返回此列表的第一個元素
- E removeLast();移除返回列表的最後一個元素;
- E pop()移除並返回此列表的第一個元素,此方法等效於removeFrist()
獲取的方法:
- E getLast(); 獲取最後一個元素
- E getFrist(); 獲取第一個元素
- Boolean isEmpty();判斷列表是否為空
六.Set集合
Java.util.Set接口(集合) extends Collection 接口
Set接口的特點:
- 不允許有重復的元素
- 沒有索引,不能用普通for遍歷
七.HashSet<E>
Java.util.HashSet<E> 集合implements Set接口
HashSet<E> 接口的特點
- 底層原理是一個哈希表(數組+單向列表),查詢快,增刪快
- 無序集合,存儲的順序有可能跟取出的順序不一致
使用HashSet<E> 存儲元素唯一的原理:重寫hashCode()方法和equals()方法;
使用HashSet add方法存儲元素的時候,會自動調用hashCode();方法,然後對集合中的元素的哈希值進行比較,如果沒有相同的哈希值,則會存入。如果哈希值有相同的,則會調用equals()方法,判斷相等,如果相等不存入, 不相等存入
八.LinkedHashSet<E>
Java.util.LinkedHashSet 集合 extends HashSet集合
LinkedHashSet<E>特點:
- 底層原理:哈希表(數組+單向鏈表)+雙向鏈表。
- 雙向鏈表可以保證元素存取有序。但元素要求不能重復
九.哈希值
就是一個十進制的整數,有操作系統隨機給出
可以使用Object類中的方法hashCode獲取哈希值
int hashCode()返回該對象的哈希碼值;
源碼:
Public native int hashCode();
native:指調用了本地操作系統的方法實現
十.ArrayList<E> 集合儲存不重復元素的的方法:
- boolean contains(Object o); 方法判斷是否包含指定元素
- 將ArrayList的元素遍歷添加到Set 集合中
- 使用HashSet集合的構造方法;HashSet(Collection <? extends E> c)
java學習之集合家族2