程序笔记   发布时间:2022-07-21  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了4.22Java自定义实现ArrayList底层大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

4.22Java自定义实现ArrayList底层

目的:

练习、复习容器、复习之前的知识、练手敲更多的代码

简单的ArrayList底层实现代码:

package com.@H_552_1@myCollection;/** * 自定义实现一个ArrayList,体会底层原理 * @author Lucifer */public class LcfArrayList {    /*ArrayList底层有一个元素数组,用它来存储内容*/    private Object[] elementData; //用来存储我们的内容的    /*数组里面又多少元素---相当于计数器*/    private int size;    /*定义一个常量作为数组长度的默认长度*/    private static final int DEFAULT_CAPACITY = 10;    /*定义一个构造器,创建数组的时候给它默认长度*/    public LcfArrayList(){        /*为数组新建对象*/        elementData = new Object[DEFAULT_CAPACITY]; //将新建的Object对象赋值给Object数组名        /*        什么都不加上去的时候默认就是elementData         */    }    /*第二个构造器像之前一样---传数字,封装方法*/    public LcfArrayList(int capacity){        /*数组长度=传入的数值---定义了自己的一个小内容*/        elementData = new Object[capacity];    }    /*在main方法当中做测试*/    public static void @H_552_1@main(String[] args) {        /*调用方法创建对象*/        LcfArrayList s1 = new LcfArrayList(20); //调用的时候就会创建一个默认数组,如果不传值就是默认的10    }}/*这样就定义了一个最基本的数组内容长度完成了一个简单的ArrayList实现代码 */

再简单的基础上加一些方法:

package com.@H_552_1@myCollection;/** * 自定义实现一个ArrayList,体会底层原理,无泛型版本 * @author Lucifer */public class LcfArrayList {    /*ArrayList底层有一个元素数组,用它来存储内容*/    private Object[] elementData; //用来存储我们的内容的    /*数组里面有多少元素---相当于计数器*/    private int size;    /*定义一个常量作为数组长度的默认长度*/    private static final int DEFAULT_CAPACITY = 10;    /*定义一个构造器,创建数组的时候给它默认长度*/    public LcfArrayList(){        /*为数组新建对象*/        elementData = new Object[DEFAULT_CAPACITY]; //将新建的Object对象赋值给Object数组名        /*        什么都不加上去的时候默认就是elementData         */    }    /*第二个构造器像之前一样---传数字,封装方法*/    public LcfArrayList(int capacity){        /*数组长度=传入的数值---定义了自己的一个小内容*/        elementData = new Object[capacity];    }    /*给这个类加一个add方法---这是一个简单的add方法,不虑复杂的情况*/    public void add(Object obj){        elementData[size++] = obj; //传入的值赋给新元素索引自增    }    /*希望输出的结果可视化,重写toString方法*/    @Override    public String toString(){        // TODO Auto-generated method stub        StringBuilder sb = new StringBuilder();        //打印出类似[a,b,c]的形式        sb.append("[");//        for (Object obj:elementData){//            sb.append(obj + ",");//        }//        sb.append("]");////        return sb.toString();//    }        for (int i = 0; i < size; i++){            sb.append(elementData[i] + ",");        }        sb.setCharAt(sb.length()-1,']');        return sb.toString();    }    /*    这样写返回的会是一个自己写的"[]"    内容是插入的内容,如果该索引没有内容会返回null    如果该索引没有值不打印的话    循环打印要改一下    如果用append的话最后末尾会有个","    所以采用替换的方法---setCharAt注意最后替换的是字符不是字符串---符号要选对     */    /*在main方法当中做测试*/    public static void @H_552_1@main(String[] args) {        /*调用方法创建对象*/        LcfArrayList s1 = new LcfArrayList(20); //调用的时候就会创建一个默认数组,如果不传值就是默认的10        s1.add("aa");        s1.add("bb");        System.out.println(s1); //如果没有重写toString方法的话打印出的是类名+地址的hash值        /*        希望结果更加可视化一些        通过重写toString方法来实现        因为自建类的父类是Object---Object是根类,所以重写Object里面的toString方法         */    }}/*这样就定义了一个最基本的数组内容长度完成了一个简单的ArrayList实现代码 *///version 1.0
package com.@H_552_1@myCollection;/** * 自定义实现一个ArrayList,体会底层原理 * 有泛型版本 * @author Lucifer */public class LcfArrayList02<E> {    /*ArrayList底层有一个元素数组,用它来存储内容*/    private Object[] elementData; //用来存储我们的内容的    /*数组里面有多少元素---相当于计数器*/    private int size;    /*定义一个常量作为数组长度的默认长度*/    private static final int DEFAULT_CAPACITY = 10;    /*定义一个构造器,创建数组的时候给它默认长度*/    public LcfArrayList02(){        /*为数组新建对象*/        elementData = new Object[DEFAULT_CAPACITY]; //将新建的Object对象赋值给Object数组名        /*        什么都不加上去的时候默认就是elementData         */    }    /*第二个构造器像之前一样---传数字,封装方法*/    public LcfArrayList02(int capacity){        /*数组长度=传入的数值---定义了自己的一个小内容*/        elementData = new Object[capacity];    }    /*给这个类加一个add方法---这是一个简单的add方法,不虑复杂的情况*/    public void add(E element){        elementData[size++] = element; //传入的值赋给新元素索引自增    }    /*希望输出的结果可视化,重写toString方法*/    @Override    public String toString(){        // TODO Auto-generated method stub        StringBuilder sb = new StringBuilder();        //打印出类似[a,b,c]的形式        sb.append("[");        for (int i = 0; i < size; i++){            sb.append(elementData[i] + ",");        }        sb.setCharAt(sb.length()-1,']');        return sb.toString();    }    /*    这样写返回的会是一个自己写的"[]"    内容是插入的内容,如果该索引没有内容会返回null    如果该索引没有值不打印的话    循环打印要改一下    如果用append的话最后末尾会有个","    所以采用替换的方法---setCharAt注意最后替换的是字符不是字符串---符号要选对     */    /*在main方法当中做测试*/    public static void @H_552_1@main(String[] args) {        /*调用方法创建对象*/        LcfArrayList s1 = new LcfArrayList(20); //调用的时候就会创建一个默认数组,如果不传值就是默认的10        s1.add("aa");        s1.add("bb");        System.out.println(s1); //如果没有重写toString方法的话打印出的是类名+地址的hash值        /*        希望结果更加可视化一些        通过重写toString方法来实现        因为自建类的父类是Object---Object是根类,所以重写Object里面的toString方法         */    }}//version 2.0

 

大佬总结

以上是大佬教程为你收集整理的4.22Java自定义实现ArrayList底层全部内容,希望文章能够帮你解决4.22Java自定义实现ArrayList底层所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。