用数组实现ArrayList,数组实现ArrayList
分享于 点击 48187 次 点评:247
用数组实现ArrayList,数组实现ArrayList
1.使用数组实现ArrayListpackage com.briup.collection;//使用数组实现public class ArrayList implements List { private Object[] elements;//数组 private int length; //数据的长度 private int size; //当前元素的个数 public ArrayList() { elements = new Object[10];//创建一个长度为10的数组 this.length=10; } public ArrayList(int length){ elements = new Object[length];//创建一个长度为length的数组 this.length=length; } //创建检查空间是否足够的方法 public void ensureCap(){ if (size>=length) { Object[] array=new Object[length+10]; System.arraycopy(elements, 0, array, 0, size); elements=array;//把新数组赋值给旧数组 length=length+10;//数组的长度增加10 } } @Override //向指定位置添加元素 public void add(int index, Object obj) { if(index<0 || index>size)return; //空间是否足够 ensureCap(); for (int i = size; i > index; i--) { elements[i]=elements[i-1];//把前一个值赋给后一个值 } elements[index] = obj; size++; } @Override public void add(Object obj) { add(size,obj); } @Override //删除元素 public Object remove(int index) { if(index<0 || index>=size) return null; Object obj = elements[index]; for (int i = index; i < size-1; i++) { elements[i]=elements[i+1];//把后一个值赋给前一个值 } size--; elements[size]=null;//把最后一个数据赋值为null1 return obj; } @Override// 设置某个位置的数据 public void set(int index, Object obj) { if(index<0 || index >= size)return; elements[index]=obj; } @Override// 获取数据 public Object get(int index) { if(index<0 || index >= size)return null; return elements[index]; } //获取数据的长度 @Override public int size() { return size; } @Override public Iterator iterator() { return new Iterator(){ //当前位置 private int position=-1; public boolean hasNext() { if(position+1<size) return true; return false; } @Override public Object next() { return get(++position); } @Override public Object remove() { return ArrayList.this.remove(position--); } }; } }2.使用链表实现LinkedListpackage com.briup.collection;//使用链表实现public class LinkedList implements List { private Node head;//头结点 private int size;//当前数据的个数 public LinkedList() { head = new Node(); } @Override public void add(int index, Object obj) { if(index<0 || index > size) return; Node curr = head;//当前节点 for(int i=0;i<index;i++){ curr = curr.next; // 下一个节点作为当前节点。 } Node node = new Node(obj); node.next = curr.next; curr.next = node; size++; } @Override public void add(Object obj) { add(size,obj); } @Override public Object remove(int index) { if(index<0||index>=size) return null; Node curr =head;//当前节点 Node pre = null; for (int i = 0; i <=index; i++) { pre = curr; curr = curr.next; } pre.next = curr.next; curr.next = null; size--; return curr.getData(); } @Override public void set(int index, Object obj) { if(index<0 || index>=size) return; Node curr = head; for (int i = 0; i <= index; i++) { curr =curr.next; } curr.setData(obj); } @Override public Object get(int index) { if(index<0 || index>=size) return null; Node curr = head; for (int i = 0; i <= index; i++) { curr =curr.next; } return curr.getData(); } @Override public int size() { // TODO 自动生成的方法存根 return size; } @Override public Iterator iterator() { // TODO 自动生成的方法存根 return null; } }
相关文章
- 暂无相关文章
用户点评