High query efficiency, low addition and deletion efficiency, thread unsafe
Build package ArrayList
TestArrayList
public class TestArrayList {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY=10;
public TestArrayList(){
elementData=new Object[DEFALT_CAPACITY];
}
public TestArrayList(int capacity){
elementData=new Object[capacity];
}
public void add(Object obj){
elementData[size++]=obj;
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("[");
for(int i=0;i<size;i++){
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
public static void main(String[] args) {
TestArrayList s1=new TestArrayList(20);
s1.add("aa");
s1.add("bb");
System.out.println(s1);
}
}
TestArrayList02 (array expansion)
public class TestArrayList02<E> {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY=10;
public TestArrayList02(){
elementData=new Object[DEFALT_CAPACITY];
}
public TestArrayList02(int capacity){
elementData=new Object[capacity];
}
public void add(E e){
if(size==elementData.length){
Object[] newArray=new Object[elementData.length+(elementData.length>>1)];
System.arraycopy(elementData,0,newArray,0,elementData.length);
elementData=newArray;
}
elementData[size++]=e;
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("[");
for(int i=0;i<size;i++){
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
public static void main(String[] args) {
TestArrayList02 s1=new TestArrayList02();
for(int i=0;i<20;i++){
s1.add("若颂"+i);
}
System.out.println(s1);
}
}
TestArrayList03 (set and get method array bounds checking)
public class TestArrayList03<E> {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY=10;
public TestArrayList03(){
elementData=new Object[DEFALT_CAPACITY];
}
public TestArrayList03(int capacity){
if(capacity<0){
throw new RuntimeException("容器容量不能为负数!");
}else if(capacity==0){
elementData=new Object[DEFALT_CAPACITY];
}else {
elementData = new Object[capacity];
}
}
public void add(E e){
if(size==elementData.length){
Object[] newArray=new Object[elementData.length+(elementData.length<<1)];
System.arraycopy(elementData,0,newArray,0,elementData.length);
elementData=newArray;
}
elementData[size++]=e;
}
public E get(int index){
checkRange(index);
return (E)elementData[index];
}
public void set(E element,int index){
checkRange(index);
elementData[index]=element;
}
public void checkRange(int index){
if(index<0||index>size-1){
throw new RuntimeException("索引不合法:"+index);
}
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("[");
for(int i=0;i<size;i++){
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
public static void main(String[] args) {
TestArrayList03 s1=new TestArrayList03();
for(int i=0;i<20;i++){
s1.add("suo"+i);
}
s1.set("ddd",10);
System.out.println(s1);
System.out.println(s1.get(19));
}
}
TestArrayList04 (remove delete operation)
public class TestArrayList04<E> {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY=10;
public TestArrayList04(){
elementData=new Object[DEFALT_CAPACITY];
}
public TestArrayList04(int capacity){
elementData=new Object[capacity];
}
public int size(){
return size;
}
public boolean isEmpty(){
return size==0?true:false;
}
public void add(E e){
if(size==elementData.length){
Object[] newArray=new Object[elementData.length+(elementData.length<<1)];
System.arraycopy(elementData,0,newArray,0,elementData.length);
elementData=newArray;
}
elementData[size++]=e;
}
public E get(int index){
checkRange(index);
return (E)elementData[index];
}
public void set(E element,int index){
checkRange(index);
elementData[index]=element;
}
public void checkRange(int index){
if(index<0||index>size-1){
throw new RuntimeException("索引不合法:"+index);
}
}
public void remove(E element){
for(int i=0;i<size;i++){
if(element.equals(get(i))){
remove(i);
}
}
}
public void remove(int index){
int numMoved=elementData.length-index-1;
if(numMoved>0){
System.arraycopy(elementData,index+1,elementData,index,numMoved);
}
elementData[--size]=null;
}
@Override
public String toString() {
StringBuilder sb=new StringBuilder();
sb.append("[");
for(int i=0;i<size;i++){
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
public static void main(String[] args) {
TestArrayList04 s1=new TestArrayList04();
for(int i=0;i<40;i++){
s1.add("suo"+i);
}
s1.set("dddd",10);
System.out.println(s1);
System.out.println(s1.get(39));
s1.remove(3);
s1.remove("suo11");
System.out.println(s1);
System.out.println(s1.size);
System.out.println(s1.isEmpty());
}
}