深入理解ArrayList(一)

165 阅读5分钟

欢迎点击「算法与编程之美」↑关注我们!

本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列博客。

ArrayList在我们日常开发中使用的非常频繁,那么我们是否了解ArrayList的内部实现机制呢?是否深入理解了ArrayList?

首先要提出的第一个问题是,如何深入的理解ArrayList呢?达到什么样的程度才叫深入理解呢?

我们采用的方法是从零开始打造一个全新的MyList,而这个类具备的功能和ArrayList几乎完全一样,采用逐步递进的方式,深入浅出,每次对上一次的方案进行分析,存在哪些问题,并提出改进的措施。

需求定义

我们首先提出一个非常简单的需求,定义一个集合类,能够实现字符串的添加操作,如下:


public static void main(String[] args) {

        MyList myList = new MyList();
        myList.add("hello");
}

代码实现

这个需求还是比较简单的,能够实现字符串的添加操作,我们可以采用字符串数组的方式来保存每次添加的字符串,然后用一个标记来表示当前数组的位置。


public class MyList {

    private static final int DEFAULT_CAPACITY = 10;
    private String[] elementData;
    private int size;

    public MyList() {
        elementData = new String[DEFAULT_CAPACITY];
    }

    private void add(String e) {

        this.elementData[size++] = e;
    }

}

构造函数中默认初始化了一个大小为10的字符串数组,这样后续在添加字符串的时候,就可以直接放在这个数组中了。

再使用一个size变量标记当前数组的位置,每次添加新的字符串后,size后移一位,实现字符串的添加操作。

这样我们就完成了一个基于字符串数组的List类的实现,能够实现字符串的添加操作。

虽然我们已经实现了需求,但是请大家思考这样的实现方式存在哪些问题?欢迎下方留言。

更多精彩文章:

聊一聊JavaWeb面试

Java面试基础(一)

Java面试基础(二)

Java面试基础(三)

聊一聊单片机和服务器

50行代码实现简单的网站服务器

50行代码实现网站服务器 2

50行代码实现网站服务器 3

JDBC连接MYSQL数据库常见问题处理

一种基于状态机的 DOM 树生成技术(1)

一种基于状态机的 DOM 树生成技术(2)

080710_HTGt_271937.png