JAvaにおけるArrayListクラス実装方法の簡易実装(手書き版、詳細コメント説明付)
4396 ワード
import java.util.Arrays;
public class ListTest {
public static void main(String[] args) {
//
ListArray listArray = new ListArray();
listArray.add("a");
listArray.add("b");
// toString() , Object
listArray.add(0,"c");
listArray.remove(0);
System.out.println(listArray);
}
}
/**
* ArrayList
* , String
*/
class ListArray{
// String
String[] data;
// /
int size = 0;
// -- , 10
//ArrayList private static final int DEFAULT_CAPACITY = 10;
public ListArray(){
data = new String[10];
}
// ,
public ListArray(int initCpacity){
data = new String[initCpacity];
}
/**
*
*/
public void grow(){
// , 0-1 , 1
// 1
// 0/1
if (data.length <= 1){
data = Arrays.copyOf(data,data.length+1);
}else {
// , data.length>>1
// , 50%
/**
* java
* << : ,num << 1, num 2
* >> : ,num >> 1, num 2
* >>> : , , 0
*/
data = Arrays.copyOf(data,data.length+(data.length>>1));
}
}
/**
*
*/
public void isOut(int index){
if(index<0 ||index>=size){
//
throw new IllegalArgumentException("Index"+index);
}
}
/**
*
* @param str
*/
public void add(String str){
//data[size] = str;
// size++,
//size++;
//
if (size >=data.length){
grow();
}
//
data[size++] = str;
}
/**
*
* @param index
* @param str
*/
public void add(int index,String str){
//
if (index<0 || index>size){
//
throw new IllegalArgumentException("Index"+index);
}
//
if (size>=data.length){
grow();
}
// ,
// ,
// for (int i = size-1;i>=index;i--){
// //
// data[i+1] = data[i];
// }
//
/**
* public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
* :
* Object src :
* int srcPos :
* Object dest :
* int destPos :
* int length : copy
*/
System.arraycopy(data,index,data,index+1,size-index);
//
data[index] = str;
//
size++;
}
/**
* --
* @param index
*/
public void remove(int index){
// , index = size -1;
isOut(index);
//
//
// for (int i =index;itoIndex){
throw new IllegalArgumentException("FromIndex"+fromIndex+",ToIndex"+toIndex);
}
//
int count = toIndex - fromIndex;
// ,
ListArray list = new ListArray(count);
//
System.arraycopy(data,fromIndex,list.data,0,count);
// size
list.size = count;
//
return list;
}
// toString ,
public String toString(){
StringBuilder sbr = new StringBuilder("[");
// ,
for (int i=0;i0)
s = s.substring(0,s.length()-2);
//
return s+="]";
}
}