陣列的特點,陣列的使用,連結串列的特點,set和list的區別,arrayList,linkedList,的常用方法,set,hashset,
陣列的特點:
陣列的長度一旦定義則不能改變
陣列中的元素都有整數索引
陣列只能儲存同一型別的元素
陣列即可以儲存基本資料型別,又可以儲存引用資料型別
陣列的使用:
獲取元素。通過索引獲取,arr[2];
新增元素(在元素3後面新增一個新元素8):要先建立新的陣列,長度為原先的陣列長度+1;遍歷原先的陣列,並將要新增的元素插入到新的陣列當中
當碰到元素3的時候,在元素3後面新增新的元素8,最後把剩餘的元素新增到元素8的後面
陣列的特點:查詢快,增刪慢。
連結串列:由鏈子連結起來的一堆結點
結點結構:地址值,值,下一個結點的地址值
獲取結點:只能遍歷連結串列,然後一個一個檢視
新增結點(在結點2後面新增一個結點
把結點2的下一個結點地址值修改為新結點9的地址值,把新結點9的下一個地址值改為結點3的地址值
連結串列特點:查詢慢,增刪快;
棧:先進後出(彈夾), 佇列:先進先出()
List特點和特有功能:
要想用遍歷集合的自定義物件必須在自定義物件的類中重寫tostring方法才可以。
List:有序的(儲存和讀取的順序是一致的)
有整數索引
允許重複
Set:無序的
無索引
元素不可以重複
List的特有功能:
Void add(int index, E slement);在指定索引位置新增指定元素,本來的元素向後排
E get(int index);根據索引返回元素,沒有元素的時候會出現越界異常
E remove(int index);:刪除指定索引的元素,返回被刪除的元素
E set(int index, E element);:修改指定索引位置的元素,替換成指定元素,返回被體替換的元素
//建立物件 。使用特有功能
List list = new ArrayList();
List.add(1, “hello”)
List 的常用子類:
Arraylist:底層結構是陣列,查詢快,增刪慢
LinkedList:底層結構是連結串列,查詢慢。增刪快
linkedList的特有功能:
Void addFirst(E e);將元素新增到索引為0的為位置(最前位置)、
Void addLast(
E getFirst():獲取索引為0 的元素
E getLast():獲取索引為size()-1的元素
E removeFirst():刪除索引為0的元素,並返回被刪除的元素
E removeLast():刪除索引為size()-1的元素,並返回被刪除的元素
建立物件
LinkedLIST list = new linkdlist();
Alt+shift+R 改元素的名字 (可以將名字一樣的一塊改掉)
SET介面:
使用HashSet儲存字串並遍歷:
Set的特點:無序(儲存和讀取的順序可能不一樣);
不允許重複
沒有整數索引
//建立物件
HashSet<String> set = new HashSet<String>();
//新增元素
Boolean boo = set.add(“hello”) 返回的是新增成功不成功
//遍歷集合物件
增強for
For(String s :set){
Syso(s);
}
使用HashSet存數自定義物件(不去重(先比hash值,自定義的hash值就是他們自己的地址值,他們地址值都不一樣所以直接新增,不去重))並遍歷:
//通過檢視原始碼發現:
HashSET ADD()方法,首先會使用當前集合的每一元素和新新增的元素進行hash值進行比較,如果hash不一樣,則直接新增元素。如果hash值一樣,比較地地址或者使用equals方法進行比較,比較結果一樣則認為是重複,不新增,所有的比較結果都不一樣則新增
建立物件
HashSet<Student> set = new HashSet<Student>();
重寫HashCode方法和equals方法實現HashSet儲存自定義物件去重
在自定義的類中重寫hashcode方法,返回相同值,讓其執行重寫的equals方法;
自動重寫HashCode和equals方法是alt加shift加s加h
優化前(重寫的方法1,2)
1重寫equals方法時需要向下轉型,獲取子類特有的成員。(判斷如果不同,return false;)
2重寫HashCode方法,讓其方法體返回相同內容即可(就可以繼續比較執行equals方法),例如(return 1;)
優化後(hashCode的方法體,讓基本資料型別直接相加,讓引用資料的hashcode值進行相加):