因为数组的某些特性(不能改变数组长度),而当我们在某些情况下需要我们数组可以根据我们存放的元素个数变化长度,那么,就出现了这个伟大的发明(哈哈哈,我觉得很伟大,可以解决我现在写泡泡龙的一个头疼的问题)
先表白一下数组列表——我喜欢你!
因为是数组列表。所以自然就有这些啥的方法:
访问元素
添加元素
删除元素
修改元素
获取元素个数
合并列表
判断元素是否存在
插入元素
清空列表
………………
好像eclipse本身就有数组这个类还是怎么的。但是今天要看看他究竟是咋回事,所以我们自己来写一个接口,定义数组列表的各大魔法(魔法。
//定义一个接口类
public interface ArrList(){
//这个类里面有很多方法,都不是实的,待会儿让数组列表类集成之后再重写
//添加元素
//假装要存的元素是int类型
public void add(int e);
//获取元素
public int get(int index);
//删除元素
//传入的参数是元素下标哈,当然你也可以去做一个参数是元素值的
public void delete(int index);
//修改元素
//要传入两个参数咯,一个下标,一个修改之后的元素值
public void updata(int index, int newValue);
//获取大小
public int getSize();
//清空列表
//这个参数就不说了-,-
public void clear(int index);
//插入元素
//之前老是把这个和添加元素搞混……
public void insert(int index, int e);
//合并列表
//我觉得后面这几个方法好麻烦写……
public void union(MyList list);
}
接口写好了……后面还有一大堆事,写方法体……
这个就要在数组列表类里面实现接口之后再写咯
写完接口类,再写数组列表类
public class MyArrList implements ArrList {
//存放数据的数组
int[] data;
//记录元素个数
int size = 0;
@Override
public void add(int e) {
//第一步 创建一个新数组
int[] newArray = new int[size+1];
//第二步 复制原数组内容到新数组中
for(int i=0; i<size; i++){
newArray[i] = data[i];
}
//第三步 将新数组赋给原数组
data = newArray;
//第四步 将新的元素添加到数组末尾
data[size] = e;
//第五步 元素个数加1
size++;
}
@Override
public int get(int index) {
// TODO Auto-generated method stub
return data[index];
}
@Override
public void reveal() {
// TODO Auto-generated method stub
//循环输出
for(int i=0; i<size(); i++){
System.out.println(this.get(i));
}
}
@Override
public void delete(int index) {
// TODO Auto-generated method stub
//判断数组是否为空
if(size!=0&&index<size){
//创建一个新数组
int[] newArr = new int[size-1];
//将原数组除了下标为index的元素之外的全部元素复制给新数组
for(int i=0;i<index;i++){
newArr[i] = data[i];
}
for(int i=index+1;i<size;i++){
newArr[i-1] = data[i];
}
//把新数组赋给原数组
data = newArr;
//元素个数减一
size--;
}else {
System.out.println("输入有错");
}
}
@Override
public void update(int index, int newValue) {
// TODO Auto-generated method stub
data[index] = newValue;
}
@Override
public int size() {
// TODO Auto-generated method stub
return size;
}
@Override
public void clear() {
// TODO Auto-generated method stub
int[] newArr = new int[0];
data = newArr;
size = 0;
}
@Override
public void insert(int index, int e) {
// TODO Auto-generated method stub
//创建新数组
int[] newArr = new int[size+1];
//新元素插入到新数组
newArr[index] = e;
//将原数组的元素复制到新数组
for(int i=0; i<index; i++){
newArr[i] = data[i];
}
for(int i=index+1; i<=size; i++){
newArr[i] = data[i-1];
}
//将新数组赋给原数组
data = newArr;
size++;
}
@Override
public void union(ArrList list) {
// TODO Auto-generated method stub
//创建新数组
int[] newArr = new int[size+list.size()];
//将原两个数组的元素添加到新数组
for(int i=0; i<=size-1; i++){
newArr[i] = data[i];
}
for(int i=0; i<list.size(); i++){
newArr[i+size] = list.get(i);
}
data = newArr;
size = size+list.size();
}
public static void main(String[] args){
//创建数组列表
MyArrList list = new MyArrList();
//添加元素
list.add(23);
list.add(12);
list.add(8);
list.add(56);
list.add(99);
list.add(111);
list.reveal();
int m = list.get(3);
System.out.println("第4个元素是 " +m);
System.out.println("删除原第四个元素");
list.delete(3);
//循环输出
list.reveal();
m = list.get(3);
System.out.println("第4个元素是 " +m);
//更改第四个元素的值
System.out.println("更改第四个元素的值为20");
list.update(3, 20);
m = list.get(3);
System.out.println("第4个元素是 " +m);
//插入元素
list.insert(3, 78);
//循环输出
list.reveal();
//再创建一个新数组
MyArrList newList = new MyArrList();
//添加元素
newList.add(1);
newList.add(2);
newList.add(3);
newList.add(4);
newList.add(5);
newList.add(6);
//合并两个数组
list.union(newList);
//输出新数组
System.out.println("新数组元素:");
list.reveal();
}
}
过程体会
1、数组的长度和元素下标我真的好容易搞混啊啊啊 啊
数组名[数组的长度size,就是length],元素下标从0开始。
2、代码后面是我乱七八糟的测试代码,过程各种出错,不过还好最终捯饬出来了。
我喜欢你,数组列表。