@nalan90
2018-05-03T00:42:55.000000Z
字数 3520
阅读 794
数据结构
属性
接口列表
代码示例
public class Array<E> {private E[] data;private int size;/*** 构造函数,传入数组的容量capacity构造Array* @param capacity*/public Array(int capacity) {this.data = (E[])new Object[capacity];this.size = 0;}/*** 无参数的构造函数,默认数组的容量capacity=10*/public Array() {this(10);}/*** 获取数组的容量* @return*/public int getCapacity() {return this.data.length;}/*** 获取数组中的元素个数* @return*/public int getSize() {return this.size;}/*** 返回数组是否为空* @return*/public boolean isEmpty() {return this.size == 0;}/*** 在index索引的位置插入一个新元素e* @param index* @param e*/public void add(int index, E e) {if (index < 0 || index > this.size) {throw new IllegalArgumentException("Add failed. Required index >= 0 and index <= size");}if (this.size == this.data.length) {resize(this.data.length * 2);}for (int i = this.size - 1; i >= index; i--) {this.data[i + 1] = this.data[i];}this.data[index] = e;this.size ++;}/*** 向所有元素后添加一个新元素* @param e*/public void addLast(E e) {this.add(this.size, e);}/*** 在所有元素前添加一个新元素* @param e*/public void addFirst(E e) {this.add(0, e);}/*** 获取index索引位置的元素* @param index* @return*/public E get(int index) {if (index < 0 || index >= this.size) {throw new IllegalArgumentException("Get failed. Index is illegal.");}return this.data[index];}/*** 获取第一个元素* @return*/public E getFirst() {return this.get(0);}/*** 获取最后一个元素* @return*/public E getLast() {return this.get(this.size - 1);}/*** 修改index索引位置的元素为e* @param index* @param e*/public void set(int index, E e) {if (index < 0 || index >= this.size) {throw new IllegalArgumentException("Set failed. Index is illegal.");}this.data[index] = e;}/*** 查找数组中是否有元素e* @param e* @return*/public boolean contains(E e) {for (int i = 0; i < this.size; i++) {if (this.data[i].equals(e)) {return true;}}return false;}/*** 查找数组中元素e所在的索引,如果不存在元素e,则返回-1* @param e* @return*/public int find(E e) {for (int i = 0; i < this.size; i++) {if (this.data[i].equals(e)) {return i;}}return -1;}/*** 从数组中删除index位置的元素, 返回删除的元素* @param index* @return*/public E remove(int index) {if (index < 0 || index >= this.size) {throw new IllegalArgumentException("Remove failed. Index is illegal.");}E ret = this.data[index];for (int i = index + 1; i < this.size; i++) {this.data[i - 1] = this.data[i];}this.size --;this.data[this.size] = null;if (this.size == this.data.length / 4 && this.data.length / 2 != 0) {resize(this.data.length / 2);}return ret;}/*** 从数组中删除第一个元素, 返回删除的元素* @return*/public E removeFirst() {return this.remove(0);}/*** 从数组中删除最后一个元素, 返回删除的元素* @return*/public E removeLast() {return this.remove(this.size - 1);}/*** 从数组中删除元素e* @param e*/public void removeElement(E e) {int index = this.find(e);if (index != -1) {this.remove(index);}}/*** 交换位置i,j的元素* @param i* @param j*/public void swap(int i, int j) {if (i < 0 || i >= this.size || j < 0 || j >= this.size) {throw new IllegalArgumentException("Swap failed. Index is illegal.");}E tmp = this.data[i];this.data[i] = this.data[j];this.data[j] = tmp;}/*** 将数组空间的容量变成newCapacity大小* @param newCapacity*/private void resize(int newCapacity) {E[] newData = (E[])new Object[newCapacity];for (int i = 0; i < this.size; i++) {newData[i] = this.data[i];}this.data = newData;}@Overridepublic String toString() {StringBuilder res = new StringBuilder();res.append(String.format("Array: size = %d, capacity = %d\n", this.size, this.data.length));res.append('[');for (int i = 0; i < this.size; i++) {res.append(this.data[i]);if (i != this.size - 1) {res.append(", ");}}res.append(']');return res.toString();}}