不要小瞧数组

 

  1 public class Array01{
  2     
  3     private int[] data;
  4     private int size; // 记录数组中实际存在的元素个数
  5 
  6     // 构造函数,传入数组的容量capacity构造Array01
  7     public Array01(int capacity){
  8         data = new int[capacity];
  9         size = 0;
 10     }
 11 
 12     // 无参数的构造函数,默认数组的容量capacity = 30
 13     public Array01(){
 14         this(30); // 调用data.Array01(capacity)
 15     }
 16 
 17     // 获取数组的容量
 18     public int getCapacity(){
 19         return data.length;
 20     }
 21 
 22     // 获取数组中的实际存储元素个数
 23     public int getSize(){
 24         return size;
 25     }
 26 
 27     // 判断数组实际元素个数是否为空
 28     public boolean isEmpty(){
 29         /*
 30         
 31         /if(0 == size){
 32             return true;
 33         }
 34 
 35         return false;
 36         
 37         */
 38 
 39         return 0 == size;
 40     }
 41 
 42     // 在index索引的位置插入一个新元素e
 43     public void add(int index, int e){
 44         // 1.判断index是否合法,非法时抛出异常
 45         if(index < 0 || index > size){
 46             throw new IllegalArgumentException("Add failed.Index is illegal.");
 47         }
 48 
 49         // 2.判断数组是否为满,满时先扩容数组容量
 50         if(data.length == size){
 51             resize(2 * data.length);
 52         }
 53         
 54         // 3.插入元素,并修改记录元素个数的size值
 55         for(int i = size - 1; i >= index; i--){
 56             data[i + 1] = data[i];
 57         }
 58         
 59         data[index] = e;
 60 
 61         size++;
 62     }
 63 
 64     // 向数组头部添加一个元素
 65     public void addFirst(int e){
 66         add(0,e);
 67     }
 68     
 69     // 向数组尾部添加一个元素
 70     public void addLast(int e){
 71         add(size,e);
 72     }
 73     
 74     // 获取index索引位置的元素
 75     public int get(int index){
 76         if(index < 0 || index >= size){
 77             throw new IllegalArgumentException("Get failed. Index is illegal.");
 78         }
 79         return data[index];
 80     }
 81 
 82     // 修改index索引位置的元素为e
 83     public void set(int index, int e){
 84         if(index < 0 || index >= size){
 85             throw new IllegalArgumentException("Set failed. Index is illegal.");
 86         }
 87         data[index] = e;
 88     
 89     }
 90 
 91     // 查找数组中是否存在元素e
 92     public boolean contains(int e){
 93         for(int i = 0 ; i < size; i++){
 94             if(e == data[i]){
 95                 return true;
 96             }
 97         }
 98         return false;
 99     }
100 
101     // 查找数组中元素e所在的索引,如果不存在元素e,则返回-1
102     public int find(int e){
103         for(int i = 0; i < size; i++){
104             if(e == data[i]){
105                 return i;
106             }
107         }
108         return -1;
109     }
110 
111     // 从数组中删除index位置的元素, 返回删除的元素
112     public int remove(int index){
113         if(index < 0 || index > size){
114             throw new IllegalArgumentException("Remove failed. Index is illegal.");
115         }
116 
117         int res = data[index]; 
118 
119         for(int i = index + 1; i < size; i++){
120             data[i - 1]  = data[i];
121         }
122 
123         size--;
124         
125         if(data.length / 4 == size && 0 != data.length / 2){
126             resize(data.length / 2);
127         }
128 
129         return res;
130     }
131 
132     // 从数组中删除第一个元素, 返回删除的元素
133     public int removeFirst(){
134         return remove(0);
135     }
136 
137     // 从数组中删除最后一个元素, 返回删除的元素
138     public int removeLast(){
139         return remove(size - 1);
140     }
141 
142     // 从数组中删除元素e
143     public void removeElement(int e){
144         if(-1 != find(e)){
145             remove(find(e));
146         }
147     }
148 
149     // 重写toString方法
150     @Override
151     public String toString(){
152         StringBuilder res = new StringBuilder();
153         res.append(String.format("Array01: size = %d, capacity = %d\n",size,data.length));
154         res.append('[');
155         for(int i = 0; i < size; i++){
156             res.append(data[i]);
157             if((size - 1 ) != i){
158                 res.append(", ");
159             }
160         }
161         res.append(']');
162         
163         return res.toString();
164     }
165 
166     // 对数组的容量变成newCapacity大小
167     private void resize(int newCapacity){
168         int[] newData = new int[newCapacity];
169         for(int i = 0; i < size; i++){
170             newData[i] = data[i];
171         }
172         data = newData;
173     }
174 
175      public static void main(String[] args) {
176 
177         Array01 arr = new Array01();
178         System.out.print("\n\t 创建一个新的数组 \t\n");
179         for(int i = 0 ; i < 15 ; i++)
180             arr.addLast(i);
181         System.out.println(arr);
182 
183         System.out.print("\n\t 添加一个元素 \t\n");
184         arr.add(1, 100);
185         System.out.println(arr);
186         
187         System.out.print("\n\t 在数组所有元素前添加一个元素 \t\n");
188         arr.addFirst(-1);
189         System.out.println(arr);
190 
191         System.out.print("\n\t 删除索引为2所在位置上的一个元素 \t\n");
192         arr.remove(2);
193         System.out.println(arr);
194         
195 
196         System.out.print("\n\t 删除指定值为7的元素 \t\n");
197         arr.removeElement(7);
198         System.out.println(arr);
199         
200         System.out.print("\n\t 删除数组起始位置上的元素 \t\n");
201         arr.removeFirst();
202         System.out.println(arr);
203         
204     }
205 }

 

 

 

运行结果:

 

posted @ 2019-08-03 15:30  hellozwx  阅读(193)  评论(0编辑  收藏  举报