国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

香港云服务器
服務器之家 - 編程語言 - Java教程 - Java 中模仿源碼自定義ArrayList

Java 中模仿源碼自定義ArrayList

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

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

Java 中模仿源碼自定義ArrayList

最近看了下ArrayList的源碼,抽空根據ArrayList的底層結構寫了一個功能簡單無泛型的自定義ArrayLsit,幫助自己更好理解ArrayList:,其實現的底層數據結構為數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
/**
 * 自己實現一個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){
    //數組擴容和數據的拷貝,重新new一個數組
    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
  }
  /**
   * 刪除對應的元素(利用equal判斷元素是否一致)
   * @param obj
   */
  public void remove(Object obj){
    for(int i=0;i<size;i++){
      if(get(i).equals(obj)){ //注意:底層調用的equals方法而不是==.
        remove(i);
      }
    }
  }
  /**
   * 設置索引對應的元素
   * @param index
   * @param obj
   * @return
   */
  public Object set(int index,Object obj){
    rangeCheck(index);
 
    Object oldValue = elementData[index];
    elementData[index] = obj;
    return oldValue;
  }
  /**
   * 將元素插入對應的位置
   * @param index
   * @param obj
   */
  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];
          System.arraycopy(elementData, 0, newArray, 0, elementData.length);
//             for(int i=0;i<elementData.length;i++){
//               newArray[i] = elementData[i];
//             }
          elementData = newArray;
        }
  }
   
  /**
   * 數組下標檢查
   * @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)); 
    }
  }
 
}

測試結果:

?
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

延伸 · 閱讀

精彩推薦
728
主站蜘蛛池模板: 精品无码久久久久久久动漫 | 99视频精品| 中文字幕一二三区 | 日韩高清一区二区 | 国产精品亚洲综合 | 久久综合九色综合网站 | 亚洲97| 国产高清精品一区二区三区 | 亚洲欧美日韩精品 | 免费看国产片在线观看 | 亚洲一区二区三区在线免费观看 | 日本黄色a视频 | 午夜在线观看视频 | 久久久久久久久久久久久九 | 国产视频一二三区 | 国产中文视频 | 午夜视频在线播放 | 一区二区三区四区在线视频 | 久久亚洲一区 | 色综合久久久久久久久久久 | 97精品一区二区 | 久久久久亚洲 | 久久久久一区 | 日韩在线视屏 | 精品国产视频 | 日韩在线中文字幕 | 免费成人在线网站 | 久久精品免费一区二区三区 | 国产区在线观看 | 亚洲久久久 | 亚洲精品九九 | 亚洲一区 日韩精品 中文字幕 | www.久久| 在线视频亚洲 | 日日精品 | 高清国产一区二区三区 | 国产在线观看91一区二区三区 | 日韩成人免费 | 中文字幕精品一区二区精品绿巨人 | 国产视频二区 | 日韩欧美一级片 |