import java.util.Iterator;
import java.util.NoSuchElementException;
/**
* @author 寒冬
* @date 2021/1/1 15:59
**/
public class MyArrayList<DataType> implements Iterable<DataType> {
private static final int DEFAULT_SIZE = 10;
private int size;
private DataType[] items;
public MyArrayList(){
doClear();
}
public void clear(){
doClear();
}
private void doClear() {
size = 0;
ensureCapacity(DEFAULT_SIZE);
}
public int size(){
return size;
}
public boolean isEmpty(){
return size == 0;
}
public void trimToSize(){//用于将动态数组中的容量调整为数组中的元素个数
ensureCapacity(size());
}
public DataType get(int idx){
if (idx < 0 || idx >= size){
throw new ArrayIndexOutOfBoundsException();
}
return items[idx];
}
public DataType set(int idx,DataType data){
if (idx < 0 || idx >= size){
throw new ArrayIndexOutOfBoundsException();
}
DataType old = items[idx];
items[idx] = data;
return old;
}
public void add(int idx,DataType data){
if (items.length == size){
ensureCapacity(size*2+1);
}
if (idx < 0 || idx >size()){
throw new ArrayIndexOutOfBoundsException();
}
for (int i = size;i>idx;i--){
items[i] = items[i-1];
}
items[idx] = data;
size++;
}
public void add(DataType data){
add(size,data);
}
public DataType remove(int idx){
DataType removedItem = items[idx];
for (int i = idx ;i<size-1;i++){
items[i] = items[i+1];
}
size--;
return removedItem;
}
public void ensureCapacity(int newCapacity) {
if (newCapacity<size)
return;
DataType[] old = items;
items = (DataType[]) new Object[newCapacity];
for (int i = 0;i<size;i++){
items[i] = old[i];
}
}
public Iterator<DataType> iterator(){
return new ArrayListIterator();
}
private class ArrayListIterator implements Iterator<DataType>{
private int current = 0;
@Override
public boolean hasNext() {
return current<size;
}
@Override
public DataType next() {
if (!hasNext()){
throw new NoSuchElementException();
}
return items[current++];
}
@Override
public void remove() {
MyArrayList.this.remove(--current);
}
}
}
顺序表——Java语言
最新推荐文章于 2024-07-10 21:37:49 发布