1. 程式人生 > >List集合基礎

List集合基礎

clone bool 需要 只需要 錯誤 一個 自己 註意 ins

集合:
數據結構(數據的組織方式和存儲方式)不同導致了集合的不同
不同的集合向上抽取最終獲得一個Collection集合
單列集合:
collection




List接口 Set接口



ArrayList LinkedList HashSet LinkedHashSet


雙列集合:
Map



HashMap LinkedHashMap


集合的clone()方法,產生的集合副本傳入一個Object類中,然後輸出的話就是按照[,]的格式輸出,輸出的方式和集合相同

collection集合的常用方法
1.添加 boolean add(E e);
2.刪除 boolean remove(Object obj);
3.清空 void clear();
4.是否包含 boolean contains(Object obj);
5.是否為空 boolean isEmpty();
6.求集合大小 int size();
7.將集合轉化為數組 Object[] toArray();

集合的遍歷方式:
1.轉化成數組遍歷
2.用叠代器Iterator

Iterator叠代器:
使用方式:
Iterator<E> it = 集合名.itrator();
(如果集合裏用的是基礎類型,這個<E>可以省略)
Iterator的方法:
boolean hasnext();
叠代器是否還有下一個元素
Object next();
叠代器下一個元素值

叠代器相當於集合的一個副本,當叠代期間發現與集合不同就會拋出異常
Iterator的優缺點:
優點:方便使用
缺點:叠代期間不能進行增刪操作,否則會產生異常(指針出現錯誤)
所以解決方法:
1.不使用Iterator,而是使用ListIterator,並使用ListIterator的add方法
因為ListIterator和Iterator不同,他有n+1個指針出現的位置(Iterator有n個),允許進行遍歷,叠代期間修改列表並獲得叠代器在列表中的當前位置。
2.老老實實用if


泛型:
將數據類型在編譯期間就確定好的引用類型


增強for
格式:
for(數據類型 變量名: 集合名){
}
註意:增強for使用期間不能進行增刪操作,因為for實現的底層是叠代器

鏈表:next指針
特點:查詢慢,增刪快(直接將下一個值的指針指向其他位置就好了)

棧和隊列:棧是先進後出,隊列是先進先出
特點:查詢快,增刪慢


List特點:
1.有序(存儲的位置和讀取的順序是一致的)
2.有整數類型的索引(從0開始)
3.允許有重復

特有的功能(因為繼承自Collection接口所以有自己的實現(雖然自己本身也是接口))
1.添加元素 void add(int index,E element);(註意和Collection的不同,這個返回值是void,並且有索引)
2.根據索引返回指定位置的元素 E get(int index);
3.移除指定索引處的元素 E remove(int index);
4.修改指定位置的元素 E set(int index,E element);
註意返回值類型

ArrayList和LinkedList的區別:
ArrayList底層是數組,查詢快,增刪慢(只需要指定索引就能查詢,但是增刪需要遍歷)
LinkedList底層是鏈表,查詢慢,增刪快(只需要改變指針的位置就能增刪,但是查詢就只能遍歷)

LinkedList的特有功能
1.添加
void addFirst(E e);在列表開頭添加元素
void addLast(E e);在列表尾部添加元素
2.查詢
E getFirst();查詢列表開頭的元素
E getLast();查詢列表尾部的元素
3.刪除
E removeFirst();刪除列表開頭的元素
E removeLast();刪除列表尾部的元素

註意返回值,查詢返回值是E正常,但是刪除返回值也是E

List集合基礎