激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Java 中模仿源碼自定義ArrayList

Java 中模仿源碼自定義ArrayList

2020-09-02 09:55Java之家 Java教程

這篇文章主要介紹了Java 中模仿源碼自定義ArrayList的相關(guān)資料,需要的朋友可以參考下

Java 中模仿源碼自定義ArrayList

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
/**
 * 自己實現(xiàn)一個ArrayList
 *
 */
public class MyArrayList {
   
  private Object[] elementData;
  private int size;
   
   
  public int size(){
    return size;
  }
   
  public boolean isEmpty(){
    return size==0;
  }
  //默認容量為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];
  }
  /**
   * 添加一個元素
   * @param obj
   */
  public void add(Object obj){
    //數(shù)組擴容和數(shù)據(jù)的拷貝,重新new一個數(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
  }
  /**
   * 刪除對應(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è)置索引對應(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;
  }
  /**
   * 將元素插入對應(yīng)的位置
   * @param index
   * @param obj
   */
  public void add(int index,Object obj){
    rangeCheck(index);
     
    ensureCapacity(); //數(shù)組擴容
     
    System.arraycopy(elementData, index, elementData, index + 1,
         size - index);
    elementData[index] = obj;
    size++;
  }
  /**
   * 數(shù)組擴容
   */
  private void ensureCapacity(){
    //數(shù)組擴容和數(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ù)組下標檢查
   * @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é)果:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
333
 
444
 
5
 
344433
 
333
 
333
 
------------------------------
 
333
 
5
 
a
 
344433
 
333
 
333

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

原文鏈接:http://blog.csdn.net/sinat_23092639/article/details/51352382

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美精品一区二区三区久久久 | 久久久精品精品 | 久久精品日产高清版的功能介绍 | 久久国语对白 | 92精品国产自产在线 | 一区二区三区四区精品 | 日韩大片在线永久观看视频网站免费 | 曰韩毛片 | 国产成人强伦免费视频网站 | 国产做爰 | 午夜人体 | 成人免费福利视频 | 羞羞色院91精品网站 | 羞羞视频免费观看网站 | 毛片视频在线免费观看 | 久久国产精品二区 | 免费黄色成人 | 欧美黄色一级带 | 色999国产| 高清国产免费 | 曰韩一级片 | 狼人狠狠干 | 成人性生活视频 | 天天操天天骑 | 中国洗澡偷拍在线播放 | 精品亚洲夜色av98在线观看 | 国产精品视频一区二区噜噜 | 伦一区二区三区中文字幕v亚洲 | 久久影院在线观看 | 成人午夜视频在线观看免费 | 国产成人av在线 | 午夜视频在线观看免费视频 | wwwxxx国产| 美女一级毛片 | 欧美a v在线| 日本成人二区 | 美女被免费网站在线软件 | 久久伊人国产精品 | 黄色大片免费网站 | 国产欧美在线观看不卡一 | omofun 动漫在线观看 |