自己实现一个泛型ArrayList
2017-07-12 22:55
375 查看
自己实现一个ArrayList,保证最基本的 add(), remove() , get() , set() , size() ,增强for循环功能。
import java.util.Iterator; import java.util.NoSuchElementException; public class MyArrayList<E> implements Iterable<E> { private static final int DEFAULT_CAPACITY = 10; private int size; private Object[] elementData; public MyArrayList() { clear(); } public void clear() { size = 0; ensureCapacity(DEFAULT_CAPACITY); } public int size() { return size; } public void trimToSize() { ensureCapacity(size); } @SuppressWarnings("unchecked") private E elementData(int index) { return (E) elementData[index]; } public E get(int index) { if (index < 0 || index >= size) throw new ArrayIndexOutOfBoundsException(); return elementData(index); } public E set(int index, E newValue) { if (index < 0 || index >= size) throw new ArrayIndexOutOfBoundsException(); E oldValue = elementData(index); elementData[index] = newValue; return oldValue; } public boolean isEmpty() { return size == 0; } public boolean add(E e) { add(size, e); return true; } public void add(int index, E e) { if (elementData.length == size) { ensureCapacity(size << 1 + 1); } for (int i = size; i > index; i--) { elementData[i] = elementData[i - 1]; } elementData[index] = e; size++; } public E remove(int index) { if (index < 0 || index >= size) return null; E old = elementData(index); for (int i = index; i < size - 1; i++) { elementData[i] = elementData[i + 1]; } size--; return old; } private void ensureCapacity(int newCapacity) { if (newCapacity < size) return; Object[] old = elementData; elementData = new Object[newCapacity]; for (int i = 0; i < size; i++) { elementData[i] = old[i]; } } @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append("[").append(elementData(0) == null ? null : elementData(0)); for (int i = 1; i < size; i++) { builder.append(", ").append(elementData(i)); } builder.append("]"); return builder.toString(); } @Override public Iterator<E> iterator() { return new Itr(); } private class Itr implements Iterator<E> { private int current = 0; @Override public boolean hasNext() { return current < size; } @Override public E next() { if (!hasNext()) throw new NoSuchElementException(); return elementData(current++); } public void remove() { MyArrayList.this.remove(--current); } } }
相关文章推荐
- 自己实现一个ArrayList,模仿ArrayList类的底层结构
- 自己实现一个简单的ArrayList
- 自己动手系列——实现一个简单的ArrayList
- 根据数组的原理,自己实现一个简易版的ArrayList
- 小伙伴来自己实现一个ArrayList
- 自己实现一个简单ArrayList
- [JAVA]集合框架之自己实现一个具有基本增查删改功能的ArrayList
- java中自己实现一个ArrayList
- 自己写一个泛型集合类型,可实现添加和遍历
- 自己实现一个泛型LinkedList
- 自己写的一个ArrayLIST,but 不知道怎么很好的实现System底下的arraycopy方法
- 自己实现一个数据库连接池
- 自己实现一个“线程池”
- 自己实现一个数据库连接池
- 自己实现一个数据库连接池
- 自己实现一个数据库连接池
- 一个泛型Hibernate DAO实现
- 一个树控件类的实现---打造自己的树控件
- 自己实现一个数据库连接池
- 自己实现一个数据库连接池