数组就是把数据码成一排进行存放
数组有可遍历、可迭代的特性,可以用foreach来实现
数组的最大优点是能快速查询
我们的索引有两种情况:有语意、无语意
我们在插入中间元素的时候把插入位置之后的数字往后移一位的时候我们插入位置的元素实际上还是存着原来的数字,我们往后移的不是空间而是数字的副本。
package www.zxx;
public class Array {
private int[] date;
private int size;
//带参构造函数
public Array(int capacity) {
date = new int[capacity];
size = 0;
}
//无参构造函数输入的数据实际上是capacity的值
public Array() {
this(10);
}
//获得数组的size
public int getSize() {
return size;
}
//获得数组的容量
public int getCapacity() {
return date.length;
}
//通过已经写好的add函数写一个在开头添加e值的函数
//好处是add函数已经处理过index数值的溢出问题
public void addFirst(int e) {
add(0, e);
}
//通过已经写好的add函数写一个在末尾添加e值的函数
//好处是add函数已经处理过index数值的溢出问题
public void addLast(int e) {
add(size, e);
}
//在index位置加入e数值的数
//要进行index数值的输入控制
public void add(int index, int e) {
if (size == date.length) {
throw new IllegalArgumentException("Add failed,Array is full");
}
if (index < 0 || index > size) {
throw new IllegalArgumentException("Add failed,Index beyond brode");
}
for (int i = size - 1; i >= index; i--) {
date[i + 1] = date[i];
}
date[index] = e;
size++;
}
//判断e数值在不在数组内
public boolean contains(int e) {
for (int i = 0; i < size; i++) {
if (date[i] == e)
return true;
}
return false;
}
//找数组中为e数值的位置,如果没有输出-1
public int find(int e) {
for (int i = 0; i < size; i++) {
if (date[i] == e)
return i;
}
return -1;
}
@Override
//重写tostring方法让System.out.println()能直接输出我们指定的类型
public String toString() {
StringBuilder res = new StringBuilder();
res.append(String.format("Array : size = %d,capacity = %d\n", size, date.length));
res.append('[');
for (int i = 0; i < size; i++) {
res.append(date[i]);
if (i != size - 1) {
res.append(',');
} else {
res.append(']');
}
}
return res.toString();
}
// 获得index位置的数
int get(int index) {
if (index < 0 || index >= size)
throw new IllegalArgumentException("Get failed.Index beyond brode.");
return date[index];
}
// 设置index位置的数为e
void set(int index, int e) {
if (index < 0 || index >= size)
throw new IllegalArgumentException("Get failed.Index beyond brode.");
date[index] = e;
}
//删除index位置的元素
//返回删除的元素
int remove(int index) {
if (index < 0 || index >= size)
throw new IllegalArgumentException("Get failed.Index beyond brode.");
int rec = date[index];
for(int i = index ; i < size ;i++) {
date[i] = date[i+1];
}
size--;
return rec;
}
//删除第一个元素
public int removeFirst() {
return remove(0);
}
//删除最后一个元素
public int removeLast() {
return remove(size-1);
}
//从数组中寻找e数值的值,如果找到删除它
public void removeElement(int e) {
int index = find(e);
if(index != -1) {
remove(index);
}
}
//主方法
public static void main(String[] args) {
Array arr = new Array(20);
for (int i = 0; i < 10; i++) {
arr.addLast(i);
}
System.out.println(arr);
arr.add(1, 100);
System.out.println(arr);
arr.addFirst(-1);
System.out.println(arr);
arr.remove(0);
System.out.println(arr);
arr.removeElement(0);
System.out.println(arr);
}
}
在这里我重写了Array实现了自己的一些方法
要注意在删除开头的结尾的数值时利用已经写好的remove函数
还要注意到size这个数值实际上是指向第一个为空的位置