java集合 arrayList 和 linkedList

上述图片为java集合类的主要类容一 、arrayList集合ADD方法的简单实现

public class MyArrayList {
    //数据存放的数组
    private Object[] elementDatas;
    //数组的长度
    private int size;

    public MyArrayList() {
        //初始化数组长度为10
        elementDatas = new Object[10];
    }

    public void add(Object obj) {
        if (size >= elementDatas.length) {
            //如果长度超过了数组的长度,扩大为原有长度的1.5倍
            Object[] temp = new Object[elementDatas.length + (elementDatas.length >> 1)];
            //把原先的数组复制到新的数组中去,复制给elementDatas
            System.arraycopy(elementDatas, 0, temp, 0, size);
            elementDatas = temp;
        }
        elementDatas[size++] = obj;
    }
}

二 、linkedList集合ADD方法的简单实现

public class MyLinkedList {
    //链表的第一个节点
    private Node first;
    //链表的最后一个节点
    private Node last;
    private int size;

    public void add(Object obj) {
        Node node = new Node();
        if (first == null) {
            //加入第一个节点
            node.prev = null;
            node.next = null;
            node.obj = obj;
            first = node;
            last = node;
        } else {
            node.prev = last;
            node.next = null;
            node.obj = obj;
            //最后节点的下一个是当前节点
            last.next = node;
            //将当前节点设置为链表最后一个节点
            last = node;
        }
    }
}
class Node {
    //当前节点的数据
    Object obj;
    //上一个节点的数据
    Node prev;
    //下一个节点的数据
    Node next;

    public Node(Object obj, Node prev, Node next) {
        this.obj = obj;
        this.prev = prev;
        this.next = next;
    }
    public Node() {
    }
}

对比:当我们要添加数据的时候,arrayList需要判断是否超过了数组长度,超过数组的长度以后,还要新增一个1.5倍长的数组,执行System.arraycopy方法将原先的数组类容复制过去,故添加数据的时候arrayList比linkedList的性能要差一点
arrayList是数组结构,linkedList是链表结构,链表遍历时候需要嵌套循环去找它的下一个Node,故遍历时候arrayList要快一些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值