当前位置: 移动技术网 > IT编程>开发语言>Java > Java ArrayList的底层实现方法

Java ArrayList的底层实现方法

2019年07月19日  | 移动技术网IT编程  | 我要评论

如下所示:

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网