public class ArrayList<E> {
private static final int DEFAULT_CAPACITY = 10;
private int size;
private E [ ] items;
@SuppressWarnings("unchecked")
public ArrayList() {
size = 0;
items = (E[]) new Object[ DEFAULT_CAPACITY ];
}
@SuppressWarnings("unchecked")
public boolean add(E e) {
if (size() == items.length) {
E [ ] newItems = (E[]) new Object[ items.length * 2 ];
System.arraycopy(items, 0, newItems, 0, items.length);
items = newItems;
}
add( size(), e );
return true;
}
public void add(int index, E element) {
rangeCheckForAdd(index);
for ( int i = size; i > index; i-- ) {
items[ i ] = items[ i - 1 ];
}
items[ index ] = element;
size ++;
}
public boolean contains(Object o) {
if ( isEmpty() ) {
return false;
}
for ( int i = 0; i < size(); i++) {
if ( items[ i ].equals(o) ) {
return true;
}
}
return false;
}
public E get(int index) {
rangeCheck(index);
return items[ index ];
}
public E set(int index, E element) {
rangeCheck(index);
E old = items[ index ];
items[ index ] = element;
return old;
}
public boolean isEmpty() {
return size() == 0;
}
public E remove(int index) {
rangeCheck(index);
E oldItem = items[ index ];
for (int i = index; i < size(); i++) {
items[ i ] = items[ i + 1 ];
}
size --;
return oldItem;
}
public boolean remove(Object o) {
if ( isEmpty() ) {
return false;
}
for ( int i = 0; i < size(); i++) {
if ( items[ i ].equals(o) ) {
return remove( i ) != null;
}
}
return false;
}
public int size() {
return size;
}
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("[");
return super.toString();
}
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
private void rangeCheckForAdd(int index) {
if (index > size || index < 0)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
private String outOfBoundsMsg(int index) {
return "Index: "+index+", Size: "+size;
}
}
java数据结构——ArrayList(线性表)
自定义ArrayList实现
最新推荐文章于 2024-07-15 21:34:10 发布
本文介绍了一个自定义的ArrayList类的实现细节,包括基本属性、构造方法、添加元素、检查元素是否存在、获取和设置指定位置元素、判断列表是否为空、删除元素等核心功能,并通过具体的源码解析帮助读者理解其工作原理。
307

被折叠的 条评论
为什么被折叠?



