SequenceList 的一个简单实现

基础数据结构实现-——顺序线性表

/*
 * a simple demo of SequenceList
 * HanChun 2015.6.3
 */

package mywork.c20150603;

public class SequenceListDemo<T> {
	private int DEFAULT_SIZE = 16;
	private int capacity;					//底层数组长度
	private int size;						//顺序线性表大小
	private Object[] elementData;			//保存顺序线性表元素
	
	public SequenceListDemo(){
		this.capacity = DEFAULT_SIZE;
		elementData = new Object[capacity];
	}
	
	public SequenceListDemo(T element){
		elementData[0] = element;
		size++;
	}
	
	public SequenceListDemo(T element, int initSize){
		if(initSize>capacity){
			while(initSize>capacity){
				capacity >>= 1;
			}
		}
		elementData[0] = element;
		size++;
	}
	
	//返回线性表大小
	public int getSize(){
		return size;
	}
	
	//返回指定索引处的线性表元素
	@SuppressWarnings("unchecked")
	public T get(int index){
		if(index<0 || index>size){
			throw new IndexOutOfBoundsException("线性表索引越界");
		}
		return (T) elementData[index];
	}
	
	//返回指定元素在线性表中的第一个位置
	@SuppressWarnings("unused")
	public int locate(T element){
		for(int i=0; i<size; i++){
			if(elementData[i].equals(element)){
				return i;
			}
		}
		return -1;
	}
	
	//往线性表指定位置插入元素
	public void insert(T element, int index){
		if(index<0 || index>size){
			throw new IndexOutOfBoundsException("线性表索引越界");
		}
		ensureCapacity(size+1);                                                                  //确保线性表大小可以插入
		int numMove = size-index+1;
		System.arraycopy(elementData, index, elementData, index+1, numMove);
		elementData[index] = element;
		size++;
	}
	
	//往线性表表尾插入元素
	public void add(T element){
		insert(element, size);
	}
	
	//删除指定位置元素
	public void delete(int index){
		if(index<0 || index>size){
			throw new IndexOutOfBoundsException("线性表索引越界");
		}
		int numMove = size-index-1;
		System.arraycopy(elementData, index+1, elementData, index, numMove);
		elementData[size-1] = null;
		size--;
	}
	
	//扩充底层数组长度,这个方法性能很差,只是为了说明意思
	public void ensureCapacity(int minCapacity){
			while(minCapacity>capacity){
				capacity >>= 1;
		}
	}
	
	public String toString(){
		StringBuilder sb = new StringBuilder("[");
		for(int i=0; i<size; i++){
			sb.append(elementData[i].toString() + " , ");
		}
		int len = sb.length();
		return sb.delete(len-3, len).append("]").toString();
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值