package data.practice;
public interface bittech1 {
void add(Object data);
boolean remove(int index);
Object get(int index);
boolean contains(Object data);
Object set(int index,Object newData);
int size();
void clear();
Object[] toArray();
}
package data.practice;
import java.util.Arrays;
public class bittench1ArrayImpl implements bittech1 {
public Object[] elementData;
private final static int DEFAULT_CAPACITY=10;
private int size;
private final static int MAX_CAPACITY=Integer.MAX_VALUE-8;
public bittench1ArrayImpl() {
this.elementData = new Object[DEFAULT_CAPACITY];
}
public bittench1ArrayImpl(int capacity){
if(capacity>0){
this.elementData=new Object[capacity];
}
}
@Override
public void add(Object data) {
ensureCapacityInternal(size+1);
elementData[size++]=data;
}
@Override
public boolean remove(int index) {
rangeCheck(index);
int moveSteps=size-index-1;
if(moveSteps>0){
System.arraycopy(elementData,index+1,elementData,index,moveSteps);
}
elementData[--size]=null;
return true;
}
public Object get(int index) {
rangeCheck(index);
return elementData[index];
}
@Override
public boolean contains(Object data) {
if(data==null){
for(int i=0;i<size;i++){
if(elementData[i]==null){
return true;
}
}
}else
for(int i=0;i<size;i++){
if(data.equals(elementData[i])){
return true;
}
}
return false;
}
@Override
public Object set(int index, Object newData) {
rangeCheck(index);
Object oldData=elementData[index];
elementData[index]=newData;
return oldData;
}
@Override
public int size() {
return this.size();
}
@Override
public void clear() {
for(int i=0;i<size;i++){
elementData[i]=null;
}
this.size=0;
}
@Override
public Object[] toArray() {
return this.elementData;
}
private void ensureCapacityInternal(int cap){
if(cap-elementData.length>0){
grow(cap);
}
}
private void grow(int cap){
int oldCap=elementData.length;
int newCap=oldCap<<1;
if (cap-newCap>0){
newCap=cap;
}
if(newCap-MAX_CAPACITY>0){
throw new IndexOutOfBoundsException("线性表超出最大值");
}
elementData= Arrays.copyOf(elementData,newCap);
}
private void rangeCheck(int index){
if(index<0||index>=size){
throw new ArrayIndexOutOfBoundsException("索引非法");
}
}
}
package data.practice;
public class Test {
public static void main(String[] args){
bittech1 bit1=new bittench1ArrayImpl(2);
bit1.add(1);
bit1.add(2);
bit1.add(3);
bit1.add(4);
System.out.println(bit1.get(2) );
System.out.println(bit1.set(3,20));
System.out.println(bit1.get(3));
System.out.println(bit1.remove(3 ));
System.out.println(bit1.get(3));
}
}