湛蓝之海 发表于 2021-10-8 12:03:12

Java ArrayList的底层实现方法

今天小编就为大家分享一篇Java 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; //初始化 容量为10
            
      
    }
    public void add(Object obj){
      elementData = obj; //若超过容量了,那么..数组扩容
      if(size==elementData.length){
            //实质:搞个新数组
            Object[] newarray = new Object;
            //数组的copy:
            System.arraycopy(elementData, 0, newarray, 0, elementData.length);
            elementData = newarray;
            
      }
      
    }
    public Object get(int index){
      rangeCheck(index);
      return elementData;
    }
    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;
elementData = obj;
return oldValue;
   
    }
    public void add(int index, Object obj){
      rangeCheck(index);
      ensureCapacity(); //扩容
      System.arraycopy(elementData, index, elementData, index + 1,
    size - index);
      elementData = obj;
      size++;
      
    }
    private void ensureCapacity(){
      //扩容
                if(size==elementData.length){
                  //实质:搞个新数组
                  Object[] newarray = new Object;
                  //数组的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的底层实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持CodeAE代码之家。
原文链接:https://blog.csdn.net/u013511642/article/details/70952949

http://www.zzvips.com/article/168312.html
页: [1]
查看完整版本: Java ArrayList的底层实现方法