还是那个仿照Vector数组,完善了一些功能,但是输出格式感觉。。。。昂
package com.zmz.work; /** * 长度可变的数组 * * @author zmz * */ public class SuperArray { /** * 容量(容器的大小) */ private int capacity; /** * 大小(元素的个数) */ private int size = 0; /** * 数据 */ private double[] data; /** * 容量的增量(步长)默认为0 */ private int increment = 0; /** * 容量为 8 线性表 */ public SuperArray() { this(8); } /** * 创建指定大小的容器 * * @param capacity * 默认的容量 */ public SuperArray(int capacity) { this.capacity = capacity; data = new double[capacity]; } // 构造器模式 // public SuperArray(int increment) { // // } /** * 创建变长数组 * * @param capacity * 容量 * @param increment * 扩容的增长因子 */ public SuperArray(int capacity, int increment) { this(capacity); this.increment = increment; } /** * 获得容器的大小(存储的元素的个数) * * @return int 小于等于容量 */ public int getSize() { return size; } /** * 获得容器的容量 * * @return int 容器的容量 */ public int getCapacity() { return capacity; } /** * 往容器中(末尾)添加一个元素 * * @param n * int 要存入容器的元素 */ public void add(double e) { // 检查容量与元素的数量 // 设计模式、重构、架构模式设计 increaseCapacity(); data[size++] = e; } /** * 在指定位置添加信息元素 * * @param index * 新元素的位置(索引、0为起点) * @param n * 添加的新元素 */ public boolean add(int index, double e) { if (index > size) { return false; } size++; increaseCapacity(); double[] newData4 = new double[capacity]; for(int i = 0; i < index; i++) { newData4[i] = data[i]; } newData4[index] = e; for(int i = index; i < data.length-1; i++) { newData4[i+1] = data[i]; } data = newData4; return true; } /** * 获得指定位置的元素 * * @param index * @return */ public double get(int index) { // TODO return data[index]; } /** * 删除特定位置的元素 * * @param index 位置 * @return */ public double remove(int index) { // TODO double[] newData2 = new double[capacity]; double getRemove = data[index]; for(int i = 0; i < index; i++) { newData2[i] = data[i]; } for(int i = index; i < data.length-1; i++) { newData2[i] = data[i+1]; } data =newData2; System.out.printf("删除成功,删除的元素位置是%d(下标从0开始),值是%f ",index,getRemove); return getRemove; } /** * 删除从索引位置开始的 n 个元素 * @param index 位置 * n 元素个数 * void */ void remove(int index,int n) { double[] newData3 = new double[capacity]; for(int i = 0; i < index-1; i++) { newData3[i] = data[i]; } for(int i = index; i < data.length-n; i++) { newData3[i] = data[i+n]; } data = newData3; System.out.println(); System.out.println("删除n个元素成功"); } /** * 扩容 */ private void increaseCapacity() { if (size == capacity) { // 扩容 if (increment == 0) { capacity *= 2; } else { capacity += increment; } double[] newData = new double[capacity]; for (int i = 0; i < data.length; i++) { newData[i] = data[i]; } data = newData; System.out.println(); System.out.println("扩容为:" + capacity); } } public void show() { System.out.printf(" 容量:%d, 大小:%d ", capacity, size); for (int i = 0; i < size; i++) { System.out.print(data[i] + ","); } System.out.println(); } }
package com.zmz.work; public class Test { // alt + / public static void main(String[] args) { //test1 SuperArray a1 = new SuperArray(); for(int i = 0; i < 5; i++) { a1.add(i); } a1.show(); a1.add(2, 100.0); a1.show(); //test2 SuperArray a2 = new SuperArray(10,5); for (int i = 0; i < 12; i++) { a2.add(i); } a2.remove(5); a2.show(); a2.remove(1,2); a2.show(); } }
输出:
容量:8, 大小:5 0.0,1.0,2.0,3.0,4.0, 容量:8, 大小:6 0.0,1.0,100.0,2.0,3.0,4.0, 扩容为:15 删除成功,删除的元素位置是5(下标从0开始),值是5.000000 容量:15, 大小:12 0.0,1.0,2.0,3.0,4.0,6.0,7.0,8.0,9.0,10.0,11.0,0.0, 删除n个元素成功 容量:15, 大小:12 0.0,3.0,4.0,6.0,7.0,8.0,9.0,10.0,11.0,0.0,0.0,0.0,