自定义接口
接口
public interface Collection {
void add(Object ob);
int size();
Iterator iterator();
}
public interface Iterator {
Object next();
boolean hasNext();
}
测试
public class Test {
public static void main(String[] args) {
//Collection c = new ArrayListTest();
Collection c = new LinkedList();
for (int i = 0; i < 15; i++) {
c.add(new Cat(i));
System.out.println(c.size());
}
Iterator iterator = c.iterator();
while (iterator.hasNext()) {
Object ob = iterator.next();
System.out.println(ob);
}
}
}
模拟ArrayList
import study1.Collection; //自定义 接口 Collection
public class ArrayListTest implements Collection{
private int index;
private Object[] objectArray = new Object[10];
public void add(Object object) {
if (index == objectArray.length) {
Object[] objectsB = new Object[objectArray.length + 100];
System.arraycopy(objectArray, 0, objectsB, 0, objectArray.length);
objectArray = objectsB;
}
objectArray[index] = object;
index++;
}
public int size() {
return index;
}
public Iterator iterator() {
return new ArrayListIterator();
}
//内部类
private class ArrayListIterator implements Iterator{
private int currentIndex = 0;
public boolean hasNext() {
if (currentIndex < index) {
return true;
}else {
return false;
}
}
public Object next() {
Object ob = objectArray[currentIndex];
currentIndex++;
return ob;
}
}
}
模拟 LinkedList
import study1.Collection; //自定义 接口 Collection
public class LinkedList implements Collection{
Node head = null; //
Node tail = null; // 尾
int size = 0;
public void add(Object ob){
Node n = new Node(ob, null);//新结点为尾结点
//尾结点指向 null
if (head == null) { // 当一个结点时,既是头,也是尾
head = n;
tail = n;
}
tail.setNext(n); //始终指向尾结点
tail = n; //新结点 为尾结点
size++;
}
public int size() {
return size;
}
@Override
public Iterator iterator() {
return new LinkedListIterator();
}
private class LinkedListIterator implements Iterator{
private int currentSize = 0;
Node node = head;
public Object next() {
if (currentSize == 0) {
currentSize++;
return node;
} else {
node = node.getNext();
currentSize++;
return node;
}
}
public boolean hasNext() {
if (currentSize >= size) {
return false;
} else {
return true;
}
}
// Node node = new Node(null, head); //方法二,速度慢
//
// @Override
// public Object next() {
// currentSize++;
// node = node.getNext();
// return node;
// }
}
}
增加泛型
public class GenericArrayList<E> {
private int index;
private Object[] objectArray = new Object[10];
public void add(E e) {
if (index == objectArray.length) {
Object[] objectsB = new Object[objectArray.length + 100];
System.arraycopy(objectArray, 0, objectsB, 0, objectArray.length);
objectArray = objectsB;
}
objectArray[index] = e;
index++;
}
public int size() {
return index;
}
public static void main(String[] args) {
GenericArrayList<String> genericArrayList = new GenericArrayList<>();
genericArrayList.add("ppds");
}
}