java回顧之單列集合、泛型、資料結構
java回顧之單列集合、泛型、資料結構
一、collection
1.1集合概述
集合的作用:集合是一個容器,可以儲存同種型別的多個數據
集合的特點:集合的長度是可變的,只能儲存引用資料型別,不能儲存基本資料型別,可以存基本資料型別的包裝類
Collection常用方法
add:新增 clear:清空 remove:刪除某個 contains:是否包含 isEmpty:判斷集合是否為空
toArray 將集合裝成Object[]型別
二、Iterator迭代器
2.1迭代器的作用
幫助Collection集合遍歷元素的。用迭代器遍歷集合要先獲取迭代器的物件
快捷鍵:itit
Collection<String> coll = new ArrayList<>(); 獲取迭代器物件 Iterator<String> it=coll.iterator(); 迭代器的方法有 next() 獲取集合中的元素 hasNext() 判斷集合中有沒有下一個元素 remove()刪除當前元素 while(it.hasNext()){ String s=it.next() }
迭代器原理
lastRet是下標
使用迭代器遍歷集合會出現併發修改異常,是因為在遍歷集合的時候,進行了增刪的操作,目前新增無解決辦法,刪除使用迭代器刪除,就可以避免迭代器異常
//使用迴圈獲取每一個元素 while(it.hasNext()){ String s = it.next(); if(s.equals("柳巖")){ //使用迭代器物件刪除當前元素 it.remove(); } }
2.2、增強for迴圈
增強for迴圈也是可以遍歷collection集合和陣列
快捷鍵:iter
格式 for(元素的型別 元素名 : 集合/陣列){ }
好處是簡單快捷,缺點是底層也是迭代器,也會出現併發修改異常,而且不能使用索引
3、泛型
3.1泛型的作用
規定了要儲存的型別,取出來也方便使用,給集合加上泛型,一看就知道里面的資料是什麼型別
當使用未定義的泛型的時候,只有在呼叫的時候確定型別 格式:<大寫字母>
比如類上定義泛型格式
//泛型代表的是某一種引用資料型別 public class MyArrayList<T> { } 在每次建立物件時確定具體的型別 //建立物件 MyArrayList<String> list = new MyArrayList<>(); //泛型確定為了字串型別
比如方法上定義泛型格式
在每次呼叫方法時確定具體型別 public class AAA { //方法上定義泛型 public <T> void method(T t){ } } //建立物件 AAA a = new AAA(); //呼叫方法泛型確定為字串 a.method("abc"); //呼叫方法泛型確定為整數 a.method(123);
介面上定義泛型
//泛型代表某種引用資料型別
//泛型的定義是在<>寫一個大寫字母
public interface MyColl<T> { void method(T t); } - 在定義子類時確定泛型具體的型別 public class MyAAA implements MyColl<String>{ //在子類中確定了泛型的具體型別 @Override public void method(String s) { } } - 在子類上不確定具體型別,就把介面的泛型變成類上的泛型 public class MyBBB<T> implements MyColl<T> { //重寫父類抽象方法 @Override public void method(T t) { } } 然後在建立物件的時候,確定泛型的型別 MyBBB<String> mb = new MyBBB<>(); mb.method("123");
3.2 泛型萬用字元
<?> :可以傳遞任何的泛型型別
<? extends XXX> :可以傳遞XXX以及XXX的子類型別
<? super XXX> :可以傳遞XXX以及XXX的父類型別
4、資料結構
4.1棧和佇列
棧:
棧是一個線性表結構,只有一個出入口,從同一個口存放資料和移出資料 特點:先入後出
佇列:
佇列也是一個線性表,佇列有兩個開口,從一邊存入資料,從另一邊取出資料 特點:先入先出
陣列:陣列是在記憶體中開闢的一塊連續的記憶體空間 特點:增刪慢,查詢快
連結串列:連結串列在記憶體中時不連續的記憶體空間,資料結構有單向連結串列和雙向連結串列,先說單向連結串列,單向連結串列的意思就是前一個節點記錄後一個節點的位置。特點:增刪快,查詢慢