之前我學Java容器的時候,以爲容器是這樣的
而實際上,是這樣的
經過了很多版本的跌代,java的容器家族越來越大了,容器總共四大類:array set list map 讓我們都來看看吧
一、List 、Set 和 Map |
綜述
Set 接口 類似集合,沒有順序,不可以重複
List 接口有順序,可以重複,所謂重複是指兩個對象equals
Map接口定義了存儲鍵值對的方法,鍵不能重複
二、Iterator接口 |
iterator是爲了實現對Java容器(collection)進行遍歷功能的一個接口。
具體爲
public interface Iterator<E> {}
三個方法
- Boolean hasNext();
判斷 iterator 內是否存在下1個元素,如果存在,返回true,否則返回false。(注意,這時上面的那個指針位置不變) - Object next();
返回 iterator 內下1個元素,同時上面的指針向後移動一位。如果不斷地循環執行next()方法,就可以遍歷容器內所有的元素了。 - void remove();
刪除 iterator 內指針的前1個元素,前提是至少執行過1次next();不建議使用。
注:Iterator.remove()是唯一安全的方式來在迭代過程中修改集合;如果在迭代過程中以任何其它的方式修改了基本集合將會產生未知的行爲。而且每調用一次next()方法,remove()方法只能被調用一次,如果違反這個規則將拋出一個異常。
意義
可以用來遍歷Set容器
三、ArrayList和LinkedList |
ArrayList
分析底層
說到ArrayList就不得不說到數組了
先在IDEA裏寫一個
List list=new ArrayList();
點到底層發現
class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
首先ArrayList是一個普通類,它繼承了AbstractList,同時實現了ist, RandomAccess, Cloneable, java.io.Serializable,
然後發現一個常量
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
然後發現一個構造函數
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
然後綜合其他代碼,ArrayList底層確實是一個數組,而且是object類型
特點(jdk 1.8)
- ArrayList構造出來的時候是空引用,在引用的時候初始化容量是10(jdk1.710,初始化容量10)
- 實例化ArrayList時,如果初始化容量不夠,是擴容1.5倍,使用copy方法
- ArrayList線程不安全
LinkedList
LinkedList底層是鏈表
ArrayList和 LinkedList區別
讀寫方面
- ArrayList 查詢快,底層是數組,因爲有序號所以查詢方便,但是每次增刪都需要遍歷
- LinkedList 增刪快,底層是鏈表,增加,只要畫出一塊內存鏈接即可,刪除也是去除鏈接。但是查詢就要一個一個找。
參考博客:https://blog.csdn.net/m0_37884977/article/details/80514809