public interface List<E> {
void add(E e);
void remove(E e);
void remove(int index);
E indexOf(int index);
int size();
void clear();
void set(int index,E e);
int getIndex(E e);
}
import java.util.Arrays;
import java.util.Iterator;
/*
自定义集合类
* */
public class MyArrayList<E> implements List<E> {
//存储集合元素的数组
private Object[] arr;
//集合中元素的数量
private int size;
public MyArrayList(){
arr = new Object[5];
}
public MyArrayList(int capcity){
arr = new Object[capcity];
}
private void checkIndex(int index){
if (index<0||index>=size){
throw new IndexOutOfBoundsException("下标越界了:"+index);
}
}
@Override
public void add(E e) {
//检查是否扩容
if (size>=arr.length){
arr= Arrays.copyOf(arr,arr.length*2);
}
//数据添加到集合内size数量+1
arr[size++]=e;
}
@Override
public void remove(E e) {
int index=getIndex(e);
if (index==-1){
throw new UnsupportedOperationException("没有此元素,不能删除");
}
remove(index);
}
@Override
public void remove(int index) {
checkIndex(index);
System.arraycopy(arr,index+1,arr,index,size-index-1);
arr[--size]=null;
}
@Override
public E indexOf(int index) {
checkIndex(index);
return (E) arr[index];
}
@Override
public int size() {
return size;
}
@Override
public void clear() {
Object[] newArr=new Object[5];
arr=newArr;
}
@Override
public void set(int index, E e) {
checkIndex(index);
arr[index]=e;
}
@Override
public int getIndex(E e) {
//如果是null,采用==比较
if (e==null){
for (int i = 0; i < size; i++) {
if (e==arr[i]){
return i;
}
}
}else {
//不是null,就采用equals()比较
for (int i = 0; i < size; i++) {
if (e.equals(arr[i])){
return i;
}
}
}
return -1;
}
@Override
public String toString(){
StringBuffer sbf= new StringBuffer("[");
for (int i = 0; i <size ; i++) {
if (i<size-1){
sbf.append(arr[i]+",");
}else {
sbf.append(arr[i]+"]");
}
}
return sbf.toString();
}
public Iterator<E> iterator(){
return new Itr();
}
private class Itr implements Iterator<E>{
private int cursor;
@Override
public boolean hasNext() {
return cursor!=size;
}
@Override
public E next() {
return (E) arr[cursor++];
}
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
public class Demo5 {
public static void main(String[] args) {
MyArrayList<String> l = new MyArrayList<>();
l.add("贾代化");
l.add("贾代善");
l.add(null);
System.out.println(l.size());
System.out.println(l.toString());
System.out.println(l.getIndex("贾代善"));
System.out.println(l.getIndex(null));//2
l.remove(1);
System.out.println(l.toString());//[贾代化,null]
l.remove(null);
System.out.println(l.toString());//[贾代化]
l.add("贾敬");
l.add("贾珍");
l.add("贾蓉");
System.out.println(l.indexOf(1));//贾敬
l.set(1,"贾敷");
System.out.println(l.toString());//[贾代化,贾敷,贾珍,贾蓉]
//遍历
Iterator<String> iterator = l.iterator();
while (iterator.hasNext()){
String ele=iterator.next();
System.out.println(ele);
}
}
}