Java ArrayList的底層實現(xiàn)方法
更新時間:2018年10月13日 08:58:08 作者:王小濤_同學
今天小編就為大家分享一篇Java ArrayList的底層實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
如下所示:
package com.soto.collection; /** * 自己實現(xiàn)一個ArrayList,幫助我們更好地理解ArrayList的底層結構; * @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; //若超過容量了,那么..數組擴容 if(size==elementData.length){ //實質:搞個新數組 Object[] newarray = new Object[size*2+1]; //數組的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); //刪除指定位置對象,刪除某位置,相當于 將后往前挪: 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)){ //注意底層調用的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(); //擴容 System.arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = obj; size++; } private void ensureCapacity(){ //擴容 if(size==elementData.length){ //實質:搞個新數組 Object[] newarray = new Object[size*2+1]; //數組的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的底層實現(xiàn)方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java實現(xiàn)inputstream流的復制代碼實例
這篇文章主要介紹了Java實現(xiàn)inputstream流的復制代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-02-02Java通過切面實現(xiàn)統(tǒng)一處理Token設置用戶信息
這篇文章主要介紹了Java切面統(tǒng)一處理Token設置用戶信息,常見的后端開發(fā)中,接口請求中一般前端都是先通過用戶登錄獲取token,每次接口請求都需要在頭信息中攜帶token信息,后端每次都需要手動處理token信息,從token信息中解析獲取用戶信息,需要的朋友可以參考下2023-10-10透過Spring源碼查看Bean的命名轉換規(guī)則圖文詳解
Java Bean是一種 Java 編程語言編寫的可重用軟件組件,包括符合一定規(guī)范的Java 類、屬性和方法,用于描述和處理應用程序中的數據對象,下面這篇文章主要給大家介紹了關于透過Spring源碼查看Bean的命名轉換規(guī)則的相關資料,需要的朋友可以參考下2023-06-06SpringBoot2.0集成MQTT消息推送功能實現(xiàn)
這篇文章主要介紹了SpringBoot2.0集成MQTT消息推送功能實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04Java?Mybatis?foreach嵌套foreach?List<list<Object>&
在MyBatis的mapper.xml文件中,foreach元素常用于動態(tài)生成SQL查詢條件,此元素包括item(必選,元素別名)、index(可選,元素序號或鍵)、collection(必選,指定迭代對象)、open、separator、close(均為可選,用于定義SQL結構)2024-09-09