最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 中模仿源碼自定義ArrayList

 更新時(shí)間:2017年03月27日 08:54:41   投稿:lqh  
這篇文章主要介紹了Java 中模仿源碼自定義ArrayList的相關(guān)資料,需要的朋友可以參考下

Java 中模仿源碼自定義ArrayList

最近看了下ArrayList的源碼,抽空根據(jù)ArrayList的底層結(jié)構(gòu)寫了一個(gè)功能簡單無泛型的自定義ArrayLsit,幫助自己更好理解ArrayList:,其實(shí)現(xiàn)的底層數(shù)據(jù)結(jié)構(gòu)為數(shù)Object組,代碼如下:

/** 
 * 自己實(shí)現(xiàn)一個(gè)ArrayList 
 * 
 */ 
public class MyArrayList { 
   
  private Object[] elementData; 
  private int size; 
   
   
  public int size(){ 
    return size; 
  } 
   
  public boolean isEmpty(){ 
    return size==0; 
  } 
  //默認(rèn)容量為10 
  public MyArrayList(){ 
    this(10); 
  } 
  /** 
   * 自定義容量 
   * @param initialCapacity 
   */ 
  public MyArrayList(int initialCapacity){ 
    if(initialCapacity<0){ 
      try { 
        throw new Exception(); 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
    } 
    elementData = new Object[initialCapacity]; 
  } 
  /** 
   * 添加一個(gè)元素 
   * @param obj 
   */ 
  public void add(Object obj){ 
    //數(shù)組擴(kuò)容和數(shù)據(jù)的拷貝,重新new一個(gè)數(shù)組 
    if(size==elementData.length){ 
      Object[] newArray = new Object[size*2+1]; 
      System.arraycopy(elementData, 0, newArray, 0, elementData.length); 
 
      elementData = newArray; 
    } 
     
    elementData[size++]=obj; 
//   size++; 
  } 
  /** 
   * 通過索引獲取元素 
   * @param index 
   * @return 
   */ 
  public Object get(int index){ 
    rangeCheck(index); 
     
    return elementData[index]; 
  } 
  /** 
   * 通過索引刪除元素 
   * @param index 
   */ 
  public void remove(int index){ 
    rangeCheck(index); 
     
    int numMoved = size - index - 1; 
    if (numMoved > 0){ 
      System.arraycopy(elementData, index+1, elementData, index, 
          numMoved); 
    } 
    elementData[--size] = null; // Let gc do its work 
  } 
  /** 
   * 刪除對(duì)應(yīng)的元素(利用equal判斷元素是否一致) 
   * @param obj 
   */ 
  public void remove(Object obj){ 
    for(int i=0;i<size;i++){ 
      if(get(i).equals(obj)){ //注意:底層調(diào)用的equals方法而不是==. 
        remove(i); 
      } 
    } 
  } 
  /** 
   * 設(shè)置索引對(duì)應(yīng)的元素 
   * @param index 
   * @param obj 
   * @return 
   */ 
  public Object set(int index,Object obj){ 
    rangeCheck(index); 
 
    Object oldValue = elementData[index]; 
    elementData[index] = obj; 
    return oldValue; 
  } 
  /** 
   * 將元素插入對(duì)應(yīng)的位置 
   * @param index 
   * @param obj 
   */ 
  public void add(int index,Object obj){ 
    rangeCheck(index); 
     
    ensureCapacity(); //數(shù)組擴(kuò)容 
     
    System.arraycopy(elementData, index, elementData, index + 1, 
         size - index); 
    elementData[index] = obj; 
    size++; 
  } 
  /** 
   * 數(shù)組擴(kuò)容 
   */ 
  private void ensureCapacity(){ 
    //數(shù)組擴(kuò)容和數(shù)據(jù)的拷貝 
        if(size==elementData.length){ 
          Object[] newArray = new Object[size*2+1]; 
          System.arraycopy(elementData, 0, newArray, 0, elementData.length); 
//             for(int i=0;i<elementData.length;i++){ 
//               newArray[i] = elementData[i]; 
//             } 
          elementData = newArray; 
        } 
  } 
   
  /** 
   * 數(shù)組下標(biāo)檢查 
   * @param index 
   */ 
  private void rangeCheck(int index){ 
    if(index<0||index>=size){ 
      try { 
        throw new Exception(); 
      } catch (Exception e) { 
        e.printStackTrace(); 
      } 
    } 
  } 
   
   
  public static void main(String[] args) { 
    MyArrayList list = new MyArrayList(3); 
    list.add("333"); 
    list.add("444"); 
    list.add("5"); 
    list.add("344433"); 
    list.add("333"); 
    list.add("333"); 
    for (int i = 0; i < list.size(); i++) { 
      System.out.println(list.get(i));  
    } 
    System.out.println("------------------------------");  
    list.remove("444"); 
    list.add(2, "a"); 
    for (int i = 0; i < list.size(); i++) { 
      System.out.println(list.get(i));  
    } 
  } 
 
} 

測試結(jié)果:

333

444

5

344433

333

333

------------------------------

333

5

a

344433

333

333

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • springMVC中@RequestParam和@RequestPart的區(qū)別

    springMVC中@RequestParam和@RequestPart的區(qū)別

    本文主要介紹了springMVC中@RequestParam和@RequestPart的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • SpringBoot解決跨域問題小結(jié)

    SpringBoot解決跨域問題小結(jié)

    在現(xiàn)代Web應(yīng)用中,由于安全性和隱私的考慮,瀏覽器限制了從一個(gè)域向另一個(gè)域發(fā)起的跨域HTTP請(qǐng)求,Spring?Boot提供了多種方式來處理跨域請(qǐng)求,本文將介紹其中的幾種方法,感興趣的朋友一起看看吧
    2023-12-12
  • 基于Java實(shí)現(xiàn)ssh命令登錄主機(jī)執(zhí)行shell命令過程解析

    基于Java實(shí)現(xiàn)ssh命令登錄主機(jī)執(zhí)行shell命令過程解析

    這篇文章主要介紹了基于Java實(shí)現(xiàn)ssh命令登錄主機(jī)執(zhí)行shell命令過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java抽象類概念與用法實(shí)例分析

    Java抽象類概念與用法實(shí)例分析

    這篇文章主要介紹了Java抽象類概念與用法,結(jié)合實(shí)例形式分析了java抽象類的概念、方法、特點(diǎn)及使用方法,需要的朋友可以參考下
    2018-02-02
  • 將Java的List結(jié)構(gòu)通過GSON庫轉(zhuǎn)換為JSON的方法示例

    將Java的List結(jié)構(gòu)通過GSON庫轉(zhuǎn)換為JSON的方法示例

    GONS是Google在GitHub上開源的Java類庫,提供各種Java對(duì)象和JSON格式對(duì)象之間的轉(zhuǎn)換功能,將Java的List結(jié)構(gòu)通過GSON庫轉(zhuǎn)換為JSON的方法示例
    2016-06-06
  • java通過反射創(chuàng)建對(duì)象并調(diào)用方法

    java通過反射創(chuàng)建對(duì)象并調(diào)用方法

    這篇文章主要介紹了java通過反射創(chuàng)建對(duì)象并調(diào)用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • springboot項(xiàng)目部署在linux上運(yùn)行的兩種方式小結(jié)

    springboot項(xiàng)目部署在linux上運(yùn)行的兩種方式小結(jié)

    這篇文章主要介紹了springboot項(xiàng)目部署在linux上運(yùn)行的兩種方式小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中ModelMapper?的高級(jí)使用

    Java中ModelMapper?的高級(jí)使用

    本文主要介紹了Java中ModelMapper?的高級(jí)使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 最新評(píng)論

    曲周县| 二连浩特市| 龙岩市| 兴仁县| 嫩江县| 拜泉县| 兴仁县| 海安县| 高碑店市| 本溪| 陈巴尔虎旗| 文水县| 怀远县| 年辖:市辖区| 财经| 靖安县| 漯河市| 滨州市| 乳山市| 绥德县| 墨脱县| 思茅市| 德江县| 安岳县| 新和县| 城固县| 武鸣县| 南汇区| 格尔木市| 荔浦县| 淅川县| 屏边| 新田县| 磐石市| 乐至县| 宾阳县| 建湖县| 醴陵市| 韩城市| 怀仁县| 十堰市|