集合【LinkedList、HashSet、Collection集合體系】,linkedlisthashset
java.util.List(集合)介面 extends Collection(集合) 介面
List集合的特點:
1.有序的集合:存入元素的順序,和取出元素的順序是一致的(存入:1,2,3 取出:1,2,3)
2.允許有重複的元素
3.有索引
特有的方法:包含索引的方法
add(int index, E e)在指定的索引上添加元素
E remove(int index)移除並返回,指定索引上的元素
E set(int index, E e) 修改並傳回值指定索引上的元素
E get(int index) 返回列表中指定位置的元素。
注意:
操作索引,一定不要索引越界,否則會報索引越界異常
IndexOutOfBoundsException:索引越界異常(集合會報)
StringIndexOutOfBoundsException:字串索引越界異常
ArrayIndexOutOfBoundsException:數組索引越界異常
E set(int index, E e) 修改並傳回值指定索引上的元素
List<Double> list
Double set(int index, E e) 修改並傳回值指定索引上的元素
E remove(int index)移除並返回,指定索引上的元素
List<Integer> list
Integer remove(int index)移除並返回,指定索引上的元素
add(int index, E e)在指定的索引上添加元素
List<String> list
add(int index, String e)在指定的索引上添加元素
java.util.LinkedList集合 implements List 介面
LinkedList集合是一個雙向鏈表:可以保證迭代順序(有序集合)
LinkedList集合有大量操作首尾的方法,要使用LinkedList中特有的方法,不能使用多態
E removeFirst() 移除並返回此列表的第一個元素。
E pop() 移除並返回此列表的第一個元素。 此方法等效於 removeFirst()。
E removeLast() 移除並返回此列表的最後一個元素。
E getFirst() 返回此列表的第一個元素。
E getLast() 返回此列表的最後一個元素。
boolean isEmpty() 如果列表不包含元素,則返回 true。
//linked.clear();
為了防止NoSuchElementException沒有元素異常
擷取元素之前,增加一個非空判斷
boolean isEmpty() 如果列表不包含元素,則返回 true。
void addFirst(E e) 將指定元素插入此列表的開頭。
void push(E e) 將該元素插入此列表的開頭。 此方法等效於 addFirst(E)。
void addLast(E e) 將指定元素添加到此列表的結尾。相當於 add(E e)
使用List儲存的資料結構
堆棧:先進後出
隊列:先進先出
數組:查詢快,增刪慢
鏈表:查詢慢,增刪快
java.util.Set集合 extends Collection集合
Set集合的特點:
1.沒有索引,不能使用普通for遍曆
2.不能儲存重複的元素
java.util.HashSet集合 implements Set集合
HashSet集合的特點:
1.沒有索引,不能使用普通for遍曆
2.不能儲存重複的元素
3.是一個無序的集合(存入和元素和取出元素的順序可能不一致)
4.底層是一個雜湊表(數組+鏈表):即增刪快,又查詢快
雜湊值:是一個十進位的整數,由作業系統隨機給出
使用Object類中的方法hashCode擷取
int hashCode() 返回該對象的雜湊碼值。
getClass().getName() + '@' + Integer.toHexString(hashCode())
使用反射擷取類名 + @ + 把十進位的hashCode變為十六進位的值
重寫Object類的hashCode方法
public native int hashCode();
發現hashCode上有一個native,調用了作業系統本身的方法,擷取雜湊值
使用HashSet集合儲存字串
HashSet集合保證元素唯一的方法:
1.元素重寫hashCode方法
2.元素重寫equals方法
String類,即重寫hashCode又重寫了equals(比較的是字串的每個字元是否相同)
java.util.LinkedHashSet extends HashSet implements Set
LinkedHashSet集合:雜湊表+鏈表(基於鏈表的雜湊表)
LinkedHashSet集合是一個雙向鏈表可以保證迭代順序
使用HashSet集合儲存自訂類型
要求:同名和同年齡的人視為同一個人,只能儲存一次
HashSet集合保證元素唯一的方法:
1.元素重寫hashCode方法
2.元素重寫equals方法
ArrayList的contains方法判斷元素是否重複原理
每添加一個元素元素的時候,先使用 contains方法判斷集合中是否包含該元素
如果不包含,在添加到集合中
使用HashSet集合過濾ArrayList集合中的重複元素
1 private static void method_01() { 2 ArrayList<String> list = new ArrayList<String>(); 3 list.add("a"); 4 list.add("a"); 5 list.add("a"); 6 list.add("a"); 7 list.add("a"); 8 list.add("b"); 9 list.add("b");10 list.add("b");11 list.add("b");12 System.out.println(list);13 14 //建立HashSet集合15 HashSet<String> set = new HashSet<String>();16 //遍曆ArrayList集合17 for (String s : list) {18 //把元素添加到set中19 set.add(s);20 }21 System.out.println(set);22 }