Java ArrayList的底層實(shí)現(xiàn)方法
如下所示:
package com.soto.collection; /** * 自己實(shí)現(xiàn)一個(gè)ArrayList,幫助我們更好地理解ArrayList的底層結(jié)構(gòu); * @author 王 * */ public class SxtArrayList { private Object[] elementData; private int size; public int size(){ return size; } public boolean isEmpty(){ return size == 0; } public SxtArrayList(){ this(10); } public SxtArrayList(int initialCapacity){ if(initialCapacity<0){ try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } } elementData = new Object[initialCapacity]; //初始化 容量為10 } public void add(Object obj){ elementData[size++] = obj; //若超過(guò)容量了,那么..數(shù)組擴(kuò)容 if(size==elementData.length){ //實(shí)質(zhì):搞個(gè)新數(shù)組 Object[] newarray = new Object[size*2+1]; //數(shù)組的copy: System.arraycopy(elementData, 0, newarray, 0, elementData.length); elementData = newarray; } } public Object get(int index){ rangeCheck(index); return elementData[index]; } public void remove(int index){ rangeCheck(index); //刪除指定位置對(duì)象,刪除某位置,相當(dāng)于 將后往前挪: int numMoved = size-index-1; if(numMoved>0){ System.arraycopy(elementData, index+1, elementData, index, numMoved); } } public void remove(Object obj){ for(int i=0;i<size;i++){ if(get(i).equals(obj)){ //注意底層調(diào)用的equals方法而不是==。 remove(i); } } } private void rangeCheck(int index){ if(index<0||index>size){ try { throw new Exception(); } catch (Exception e) { e.printStackTrace(); } } } public Object set(int index, Object obj){ rangeCheck(index); Object oldValue = elementData[index]; elementData[index] = obj; return oldValue; } public void add(int index, Object obj){ rangeCheck(index); ensureCapacity(); //擴(kuò)容 System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = obj; size++; } private void ensureCapacity(){ //擴(kuò)容 if(size==elementData.length){ //實(shí)質(zhì):搞個(gè)新數(shù)組 Object[] newarray = new Object[size*2+1]; //數(shù)組的copy: System.arraycopy(elementData, 0, newarray, 0, elementData.length); elementData = newarray; } } public static void main(String[] args) { SxtArrayList list = new SxtArrayList(3); list.add("222"); list.add("333"); list.add("444"); list.add("555"); list.add("666"); list.add("777"); System.out.println(list.size()); System.out.println(list.get(6)); } }
以上這篇Java ArrayList的底層實(shí)現(xiàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java synchronize底層實(shí)現(xiàn)原理及優(yōu)化
- Java CAS底層實(shí)現(xiàn)原理實(shí)例詳解
- JAVA序列化和反序列化的底層實(shí)現(xiàn)原理解析
- 深入學(xué)習(xí)Java同步機(jī)制中的底層實(shí)現(xiàn)
- Java并發(fā)底層實(shí)現(xiàn)原理學(xué)習(xí)心得
- 淺談Java 并發(fā)的底層實(shí)現(xiàn)
- Java基礎(chǔ)詳解之面向?qū)ο蟮哪切┦聝?/a>
- java中面向?qū)ο蟮母拍罴爸R(shí)點(diǎn)總結(jié)
- Java基礎(chǔ)之面向?qū)ο髾C(jī)制(多態(tài)、繼承)底層實(shí)現(xiàn)
相關(guān)文章
Java實(shí)現(xiàn)inputstream流的復(fù)制代碼實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)inputstream流的復(fù)制代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02Java通過(guò)切面實(shí)現(xiàn)統(tǒng)一處理Token設(shè)置用戶(hù)信息
這篇文章主要介紹了Java切面統(tǒng)一處理Token設(shè)置用戶(hù)信息,常見(jiàn)的后端開(kāi)發(fā)中,接口請(qǐng)求中一般前端都是先通過(guò)用戶(hù)登錄獲取token,每次接口請(qǐng)求都需要在頭信息中攜帶token信息,后端每次都需要手動(dòng)處理token信息,從token信息中解析獲取用戶(hù)信息,需要的朋友可以參考下2023-10-10透過(guò)Spring源碼查看Bean的命名轉(zhuǎn)換規(guī)則圖文詳解
Java Bean是一種 Java 編程語(yǔ)言編寫(xiě)的可重用軟件組件,包括符合一定規(guī)范的Java 類(lèi)、屬性和方法,用于描述和處理應(yīng)用程序中的數(shù)據(jù)對(duì)象,下面這篇文章主要給大家介紹了關(guān)于透過(guò)Spring源碼查看Bean的命名轉(zhuǎn)換規(guī)則的相關(guān)資料,需要的朋友可以參考下2023-06-06在java poi導(dǎo)入Excel通用工具類(lèi)示例詳解
這篇文章主要給大家介紹了關(guān)于在java poi導(dǎo)入Excel通用工具類(lèi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09SpringBoot2.0集成MQTT消息推送功能實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot2.0集成MQTT消息推送功能實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04Java?Mybatis?foreach嵌套foreach?List<list<Object>&
在MyBatis的mapper.xml文件中,foreach元素常用于動(dòng)態(tài)生成SQL查詢(xún)條件,此元素包括item(必選,元素別名)、index(可選,元素序號(hào)或鍵)、collection(必選,指定迭代對(duì)象)、open、separator、close(均為可選,用于定義SQL結(jié)構(gòu))2024-09-09