zoukankan      html  css  js  c++  java
  • 模仿ArrayList底层实现

    制作一个简单的Arraylist的底层执行实现:

    我们需要有三个类:① ArrayList.java;② List.java;③ Test.java;以此做一个简单的模仿

    第一步:ArrayList.java类

     1 public class ArrayList implements List{
     2     
     3      private Object[] elementData;//底层的数组
     4     
     5      private int size;//元素的个数
     6     
     7      public ArrayList() {
     8         this.elementData = new Object[20];
     9      }
    10      
    11     public ArrayList(int initialCapacity) {
    12         this.elementData = new Object[initialCapacity];
    13     }
    14 
    15     public void add(Object obj) {
    16         //扩容的时机 当list的内容 与 数组的长度相等
    17         if(size == elementData.length){
    18             /*//1.创建一个更大空间的数组
    19             Object [] arr = new Object [elementData.length * 2];
    20             //2.把旧数组 copy到 新的数组
    21             for(int i =0; i<elementData.length;i++){
    22                 arr[i] = elementData[i];
    23             }
    24             //3.将新的数组引用给旧的数组引用
    25             elementData = arr;*/
    26             elementData = Arrays.copyOf(elementData, elementData.length * 2);
    27         }
    28         /*elementData[size] = obj;//size 从0开始
    29         size++;*/
    30         elementData[size++]=obj;
    31     }
    32 
    33     public int size() {
    34         return size;
    35     }
    36 
    37     public Object get(int inedex) {
    38         return elementData[inedex];
    39     }
    40 
    41     public boolean isEmpty() {
    42         return size == 0;
    43     }
    44 
    45     @Override
    46     public String toString() {
    47         StringBuilder sb = new StringBuilder("[");
    48         for(int i=0;i<size;i++){
    49             if(i!=size-1){
    50                 sb.append(elementData[i]+",");
    51             }else{
    52                 sb.append(elementData[i]);
    53             }
    54         }
    55         sb.append("]");
    56         return sb.toString();
    57     }
    58 }
    View Code

    第二步:List.java类:

     1 public interface List{
     2     //添加元素方法
     3     public void add(Object obj);
     4 
     5     //元素的长度
     6     public int size();
     7 
     8     //获取指定位置上的元素
     9     public Object get(int index);
    10 
    11     //判断集合是否为空
    12     public boolean isEmpty();
    13 }
    View Code

    第三步:Test.java类:

     1 public class Test{
     2     public static void main(String [] args){
     3         Arraylist list = new Arraylist();
     4         for(int i=0; i<10; i++){
     5              list.add("elem" + i);
     6         }
     7         System.out.println(isEmpty());
     8         System.out.println(list.size());
     9         System.out.println(list);
    10     } 
    11 }    
    View Code

    到此,我们可以使用自己实现的一些方法!

  • 相关阅读:
    关于Java 拷贝数组方法 Arrays.copyOf() 是地址传递还是值传递
    n皇后问题
    子集
    排列
    矩阵翻转
    删除集合元素的方法
    Java最大值与最小值
    Spring Security +Oauth2 +Spring boot 动态定义权限
    VirtualBox Centos7虚拟机集群配置
    VirtualBox使用Centos7与主机共享文件夹
  • 原文地址:https://www.cnblogs.com/superdrew/p/8067193.html
Copyright © 2011-2022 走看看