Java ArrayList的底层实现方法
程序员文章站
2024-03-06 20:20:50
如下所示:
package com.soto.collection;
/**
* 自己实现一个arraylist,帮助我们更好地理解arraylist...
如下所示:
package com.soto.collection; /** * 自己实现一个arraylist,帮助我们更好地理解arraylist的底层结构; * @author 王 * */ public class sxtarraylist { private object[] elementdata; private int size; public int size(){ return size; } public boolean isempty(){ return size == 0; } public sxtarraylist(){ this(10); } public sxtarraylist(int initialcapacity){ if(initialcapacity<0){ try { throw new exception(); } catch (exception e) { e.printstacktrace(); } } elementdata = new object[initialcapacity]; //初始化 容量为10 } public void add(object obj){ elementdata[size++] = obj; //若超过容量了,那么..数组扩容 if(size==elementdata.length){ //实质:搞个新数组 object[] newarray = new object[size*2+1]; //数组的copy: system.arraycopy(elementdata, 0, newarray, 0, elementdata.length); elementdata = newarray; } } public object get(int index){ rangecheck(index); return elementdata[index]; } public void remove(int index){ rangecheck(index); //删除指定位置对象,删除某位置,相当于 将后往前挪: int nummoved = size-index-1; if(nummoved>0){ system.arraycopy(elementdata, index+1, elementdata, index, nummoved); } } public void remove(object obj){ for(int i=0;i<size;i++){ if(get(i).equals(obj)){ //注意底层调用的equals方法而不是==。 remove(i); } } } private void rangecheck(int index){ if(index<0||index>size){ try { throw new exception(); } catch (exception e) { e.printstacktrace(); } } } public object set(int index, object obj){ rangecheck(index); object oldvalue = elementdata[index]; elementdata[index] = obj; return oldvalue; } public void add(int index, object obj){ rangecheck(index); ensurecapacity(); //扩容 system.arraycopy(elementdata, index, elementdata, index + 1, size - index); elementdata[index] = obj; size++; } private void ensurecapacity(){ //扩容 if(size==elementdata.length){ //实质:搞个新数组 object[] newarray = new object[size*2+1]; //数组的copy: system.arraycopy(elementdata, 0, newarray, 0, elementdata.length); elementdata = newarray; } } public static void main(string[] args) { sxtarraylist list = new sxtarraylist(3); list.add("222"); list.add("333"); list.add("444"); list.add("555"); list.add("666"); list.add("777"); system.out.println(list.size()); system.out.println(list.get(6)); } }
以上这篇java arraylist的底层实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。