Java ArrayList的底层实现方法

所属分类: 软件编程 / java 阅读数: 44
收藏 0 赞 0 分享

如下所示:

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

更多精彩内容其他人还在看

spring boot 静态资源处理方法

本篇文章主要介绍了spring boot 静态资源处理方法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解spring boot 使用application.properties 进行外部配置

这篇文章主要介绍了详解spring boot 使用application.properties 进行外部配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Java实现分页的前台页面和后台代码

这篇文章主要为大家详细介绍了Java实现分页的前台页面和后台代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

详解spring面向切面aop拦截器

spring中有很多概念和名词,比如过滤器、拦截器、aop等。这篇文章主要介绍了详解spring面向切面aop拦截器,有兴趣的可以了解一下。
收藏 0 赞 0 分享

Java easyui树形表格TreeGrid的实现代码

这篇文章主要为大家详细介绍了Java easyui树形表格TreeGrid的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Java的NIO与IO的详解及对比

这篇文章主要介绍了Java的NIO与IO的详解及对比的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java中网络IO的实现方式(BIO、NIO、AIO)介绍

这篇文章主要介绍了Java中网络IO的实现方式(BIO、NIO、AIO)介绍的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 敏感信息加密处理

本文主要介绍了Java 敏感信息加密处理的相关知识:1)敏感信息加密处理我们要实现什么;2)敏感信息加密处理我做了些什么;3)敏感信息加密实现方法。具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享

详解使用Spring3 实现用户登录以及权限认证

这篇文章主要介绍了详解使用Spring3 实现用户登录以及权限认证,这里整理了详细的代码,有需要的小伙伴可以参考下。
收藏 0 赞 0 分享

Java的内存机制详解

本文主要介绍了Java的内存机制的相关知识,具有很好的参考价值,下面跟着小编一起来看下吧
收藏 0 赞 0 分享
查看更多