/**
* 线性表,数组实现
* @author yuli
*
*/
public class MyArrayList<T> {
private static final int DEFAULT_CAPACITY = 10;//默认容量
private int size;
private Object[] items;
public MyArrayList() {
clean();
}
public void clean(){
this.size=0;
swap(DEFAULT_CAPACITY);
}
public int size(){
return size;
}
/**
* 在索引下替换一个元素
* @param t
* @param index
* @return
*/
public T set(T t,int index){
if(index < 0 || index > size){
throw new ArrayIndexOutOfBoundsException(index);
}
@SuppressWarnings("unchecked")
T old = (T) items[index];
items[index] = t;
return old;
}
/**
* 获得索引下的元素
* @param index
* @return
*/
@SuppressWarnings("unchecked")
public T get(int index){
if(index < 0 || index> size){
throw new ArrayIndexOutOfBoundsException(index);
}
return (T) items[index];
}
/**
* 在末尾添加一个元素
* @param t
*/
public void add(T t){
if(size == items.length){
swap(size * 2 + 1);
}
items[size++] = t;
}
/**
* 在索引下增加一个元素
* @param t
* @param index
*/
public void add(T t,int index){
if(index < 0 || index> size){
throw new ArrayIndexOutOfBoundsException(index);
}
//如果元素的长度等于改元素添加元素的个数,就扩容
if(size == items.length){
swap(size * 2 + 1);
}
for(int i = size ;i > index;i++){
items[i] = items[i-1];
}
items[index] = t;
size++;
}
/**
*移除索引的元素
**
@SuppressWarnings("unchecked")
public T remove(int index){
if(index < 0 || index> size){
throw new ArrayIndexOutOfBoundsException(index);
}
Object item = items[index];
for(int i = index;i<size;i++){
items[i] = items[i+1];
}
size--;
return (T) item;
}
/**
* 扩容,交换元素
* @param newSize
*/
public void swap(int newSize){
if(newSize < size){
return;
}
Object[] newItems = new Object[newSize];
for(int i=0;i<this.size;i++){
newItems[i]=items[i];
}
this.items = newItems;
}
}
线性表数组实现
最新推荐文章于 2023-01-24 15:40:26 发布