# ArrayList **Repository Path**: gaohanghang/ArrayList ## Basic Information - **Project Name**: ArrayList - **Description**: 手写ArrayList - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-03-02 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README > MyArraylist.java ```java package ArrayList; import java.util.Arrays; public class MyArraylist { private Object[] objs = new Object[10]; //定义数组,初始化长度是10 private int index = 0; //数组下标 /** * 添加 *@param o */ public void add(Object o){ if (index == objs.length){ // 扩容 extend(); } objs[index++] =o; } /** * 根据下标获取对象 * @param index 下标 * @return */ public Object get(int index){ return objs[index]; } /** * 计算元素个数 * @return */ public int size(){ int size = 0; for (int i = 0; i < objs.length; i++) { if(objs[i]!=null){ size++; } } return size; } /** * 清空 */ public void clear(){ for (int i = 0; i < objs.length; i++) { objs[i] = null; } } /** * 判断是否包含 * @param o * @return */ public boolean contains(Object o){ for (int i = 0; i < objs.length; i++) { if(o!=null&&o.equals(objs[i])){ return true; } } return false; } /** * 根据下标删除 */ public void remove(int index){ if (index<0 || index>= this.size()){ System.out.println("下标无效,无法删除。。。"); throw new IndexOutOfBoundsException(); } for (int i = index; i < objs.length; i++) { objs[i] = objs[i+1]; if (i==this.size()){ break; } } } /** * 根据对象删除 * @param o */ public void remove(Object o){ int index = getIndexByObject(o); remove(index); } /** * 根据对象获取对象的下标 * @return */ public int getIndexByObject(Object o){ for (int i = 0; i < objs.length; i++) { if(o!=null&&o.equals(objs[i])){ return i; } } return -1; } /** * 自定义迭代器 */ public MyIterator iterator(){ return new Iterator(); } class Iterator implements MyIterator{ private int size = 0; @Override public boolean hasNext() { if(objs[size]!=null) return true; else return false; } @Override public Object next() { size++; return objs[size-1]; } } /** * 扩容 */ private void extend(){ Arrays.copyOf(objs,objs.length+1); } } ``` > MyIterator.java ```java package ArrayList; /** * 自定义迭代器 * */ public interface MyIterator { boolean hasNext(); Object next(); } ``` > Test.java ```java package ArrayList; import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("111"); list.add("222"); list.add("333"); // System.out.println(list.get(0)); // // for (int i = 0; i < list.size(); i++) { // System.out.println(list.get(i)); // } // // list.remove(1); // for (int i = 0; i < list.size(); i++) { // System.out.println(list.get(i)); // } // // //迭代器遍历 // System.out.println("迭代器遍历:"); // Iterator itor = list.iterator(); // while (itor.hasNext()){ // System.out.println(itor.next()); // } System.out.println("自定义ArrayList:"); MyArraylist my = new MyArraylist(); my.add("aaa"); my.add("bbb"); my.add("ccc"); my.add("ddd"); System.out.println(my.get(1)); System.out.println(my.size()); System.out.println("自定义ArrayList集合for循环:"); for (int i = 0; i < my.size() ; i++) { System.out.println(my.get(i)); } // my.clear(); // System.out.println("测试清空:"); // for (int i = 0; i < my.size() ; i++) { // System.out.println(my.get(i)); // } // System.out.println("清空后的长度"+my.size()); System.out.println(my.contains("ccc")); // my.remove(4); // my.remove("dddd"); System.out.println("测试删除:"); for (int i = 0; i < my.size(); i++) { System.out.println(my.get(i)); } System.out.println("测试自定义的迭代器"); MyIterator itor = my.iterator(); while (itor.hasNext()){ System.out.println(itor.next()); } } } ```