ArraysList方法

本文详细分析了ArrayList的内部机制,指出其基于数组实现,初始容量为10,通过扩容机制适应元素增加。ArrayList的特点包括查询效率高(直接通过索引访问),增删效率低(涉及数组移动),且不保证线程安全。文中还提供了简单的ArrayList实现示例,展示了添加、扩容和获取元素等操作。
摘要由CSDN通过智能技术生成

ArraysList分析

Arrays底层源码使用的其实是数组,初始大小为10。而可以无限存放数值的原因是:数组内的扩容机制,当所要存放的数组数量超过10时,就会自动扩容以保存更多的值。索引则使用的是,
特点:查询效率高,增删效率低,线程不安全。使用较多。
查询效率高:直接使用数组的索引值的方法。
增删效率低:每次进行增删都会进行一次便利。
线程不安全:(以小编水平暂时无法解释)
手写一个ArraysList:(仅供参考)

public class ArraysTest<E> {
   
   private Object[] list = new Object[10];
   private int size = 0;
   public void add(E e) {

   	size++;
   	
   	for(int i =0; i < size;i++ ) {
   		
   		if(list[i] == null) {
   			list[i] = e;
   			return;
   		};
   		
   		append(e,size);
   		
   	}
   	
   }
   
   //当数组的大小不够时使用此方法扩大
   private void append(E e,int size) {
   	
   	Object[] temp = new Object[list.length+ (list.length>>1)];
   	int i1 = 0;
   	for( ; i1<list.length;i1++) {
   		temp[i1] = list[i1];

   	}
   	list = temp;
   	list[size + 1] = e;
   }
   
   //在指定位置添加值
   public void add(E e,int index) {
   	
   	if(list[index] == null) {
   		size++;
   		list[index] = e; 
   	}else {
   		System.out.println("There isn't null");
   	}
   		
   	
   }
   @Override
   public String toString() {
   	System.out.print("[");
   	
   	System.out.println("[");
   	for(int i = 0;i < size-1; i++) {
   		
   		System.out.println(list[i]+",");
   		
   	}
   	
   	System.out.print(list[size-1]+"]");
   	return null;
   }
   
   //用于获得索引位置的值
   public Object get(int index) {
   	
   	if(list[index] != null) {
   		return list[index];
   	}else {
   	return "抱歉!数组中没有这个值";
   	}
   }
   
   //用于在数组中指定位置放入值
   public void set(E e, int index) {
   	if(index <= list.length) {
   		
   		list[index] = e;
   		
   	}else if(index > list.length && index > (list.length+(list.length>>1))) {
   		
   			append(e,index);
   		
   	}else{
   		set(e,index);
   	}
   	
   	
   }
   

   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值