欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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的底层实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。