MyList
虽然javaApi里面实现了ArryList类,但是尝试自己写一个可以存Object类型的MyList类。
List接口
为了面向接口开发,自定义List接口。
public interface List {
public void add(Object obj);
public void remove(int index);
public void remove(Object obj);
public Object get(int index);
}
实现类
/**
* 仿List集合
*
* @author Administrator
*
*/
public class MyList implements List {
public int size = 0;// 有效长度
private int capacity = 10;// 数组长度
private Object[] emelment = new Object[capacity];
// 添加方法
@Override
public void add(Object obj) {
Object[] newEmelment;
if (emelment[capacity - 1] != null) {
// 如果数组已满,扩容,数组长度加10
capacity = capacity + 10;
newEmelment = new Object[capacity];
}
newEmelment = new Object[capacity];
int i = 0;
for (; i < emelment.length; i++) {
if (emelment[i] == null) {
break;
}
newEmelment[i] = emelment[i];
}
newEmelment[i] = obj;
size++;
emelment = newEmelment;
}
// 删除方法,根据索引坐标删除
@Override
public void remove(int index) {
if (index < 0 || index >= capacity) {
System.out.println("删除数据下标越界!!!");
return;
}
Object[] newEmelment;
if (capacity - size > 10 && capacity > 10) {
// 缩容,如果实际数组长度与有效数组长度之差大于10,数组长度减5,最小缩到10
capacity = capacity - 5;
newEmelment = new Object[capacity];
}
newEmelment = new Object[capacity];
int j = 0;
for (int i = 0; i < newEmelment.length; i++) {
if (emelment[i] == null) {
break;
}
if (i == index - 1) {
continue;
}
newEmelment[j++] = emelment[i];
}
size--;
emelment = newEmelment;
}
// 删除方法,根据元素删除
@Override
public void remove(Object obj) {
Object[] newEmelment;
if (capacity - size > 10 && capacity > 10) {
// 缩容,如果实际数组长度与有效数组长度之差大于10,数组长度减5,最小缩到10
capacity = capacity - 5;
newEmelment = new Object[capacity];
}
newEmelment = new Object[capacity];
int j = 0;
int i = 0;
for (; i < newEmelment.length; i++) {
if (emelment[i] == null) {
break;
}
if (obj.equals(emelment[i])) {
size--;
continue;
}
newEmelment[j++] = emelment[i];
}
if (i == j) {
System.out.println("不存在该数据!!!");
return;
}
emelment = newEmelment;
}
// 查询方法,根据坐标获取数据
@Override
public Object get(int index) {
if (index < 0 || index >= size) {
return "查询数据下标越界!!!";
} else {
return emelment[index];
}
}
@Override
public String toString() {
String list = "[";
for (int i = 0; i < emelment.length; i++) {
if (emelment[i] == null) {
break;
}
list = list + emelment[i];
if (i != emelment.length - 1) {
if (emelment[i + 1] != null) {
list = list + ",";
}
}
}
list = list + "]";
return list;
}
}
测试类
public class Test {
public static void main(String[] args) {
List list = new MyList();
for (int i = 0; i < 10; i++) {
list.add(i);
}
System.out.println(list);
System.out.println(list.size);
list.add("张三");
System.out.println(list);
System.out.println(list.size);
list.remove(new Integer(8));
System.out.println(list);
System.out.println(list.size);
list.remove("jsisjisd");
System.out.println(list.size);
list.add(true);
System.out.println(list.get(100));
System.out.println(list);
System.out.println(list.size);
list.remove(true);
System.out.println(list);
System.out.println(list.size);
}
}
结果:
[0,1,2,3,4,5,6,7,8,9]
10
[0,1,2,3,4,5,6,7,8,9,张三]
11
[0,1,2,3,4,5,6,7,9,张三]
10
不存在该数据!!!
10
查询数据下标越界!!!
[0,1,2,3,4,5,6,7,9,张三,true]
11
[0,1,2,3,4,5,6,7,9,张三]
10