一.Java中手动实现ArrayList
对于我这种初学Java的人来说,最重要的一点就是多敲代码,今天跟着Java300集里面敲了一下关于ArrayList的手动实现。
package Pikaqiu.mycollection;
import javax.management.RuntimeErrorException;
/**
* 自定义实现一个ArrayList,体会底层原理
* 含有泛型,数组扩容
* 含有set和get方法
* 含有删除操作
* @author 14239
*
*/
public class SxtArrayList<E> {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY=10;
public SxtArrayList(){
elementData=new Object[DEFALT_CAPACITY];
}
public SxtArrayList(int capacity) {
if(capacity<0) {
throw new RuntimeException("容器容量不合法:"+capacity);
}
else if(capacity==0) {
elementData=new Object[DEFALT_CAPACITY];
}
else {
elementData=new Object[capacity];
}
}
public int size() {
return size;
}
public boolean is_Empty() {
return size==0?true:false;
}
public void add(E element) {
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++]=element;
}
public void set(int index,E element) {
checkRange(index);
elementData[index]=element;
}
public E get(int index) {
checkRange(index);
return (E) elementData[index];
}
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=size-index-1;
if(nummoved>0) {
System.arraycopy(elementData, index+1, elementData, index, nummoved);
}
elementData[--size]=null;
}
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) {
SxtArrayList<String> sa=new SxtArrayList<>();
sa.add("aa");
sa.add("bb");
for(int i=0;i<40;i++) {
sa.add("Pikaqiu"+i);
}
System.out.println(sa.toString());
sa.remove(1);
System.out.println(sa.toString());
sa.remove(0);
System.out.println(sa.toString());
}
}
感觉Java就是要跟着多敲,敲着敲着就懂了,主要就是方法的调用
1572

被折叠的 条评论
为什么被折叠?



