ArrayList和LinkedList底层实现与理解

78、集合中存放的依然是对象的引用而不是对象的本身。

79、ArrayList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型数组。

80、如果增加的元素个数超过了10个,那么ArrayList底层会新生成一个数组,长度为原数组的1.5倍 +1,然后将原数组的内容复制到新数组当中,并且后续增加的内容都会放到新数组当中。当新数组无法容纳增加的元素时,重复该过程。

81、对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动,价格比较高。

82、集合当中只能放置对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的包装类才能加入到集合当中。

83、集合当中放置的都是Object类型,因此取出来的也是Object类型,那么必须要使用强制类型转换将其转换为真正的类型(放置进去的类型)。

84、线性表的逻辑结构是忙n个数据元素的有限序列:(a1, a2, a3,n).n为线性表的长度(n>=0), n=0的表是空表。

数据元素呈线性关系。必存在唯一的称为第一个的数据元素;必存在唯一的称为最后一个的数据元素;除第一个元素外,每个元素都有且只有一个前驱元素;除最后一个元素外,每个元素都有且只有一个后继元素。

所有数据元素在同一个线性表中必须是相同的数据类型。

线性表按其存储结构可分为顺序表和链表。用顺序存储结构存储的线性表称为顺序表

用链式存储结构存储的线性表称为链表

将线性表中的数据元素依次存放在某个存储区域中,所形成的表称为顺序表。一维数组就是用顺序方式存储的线性表。

85、单向链表:

public class Node {

 

    

    String data;

    Node next;

    

    Node(String data){

        this.data = data;

    }

}

 

public class TestNode {

 

    public static void main(String[] args) {

        

        Node node1 = new Node("node1");

        Node node2 = new Node("node2");

        Node node3 = new Node("node3");

        

        node1.next = node2;

        node2.next = node3;

        

        System.out.println(node1.next.next.data);

        

        System.out.println("--------------------------");

        

        Node node4 = new Node("node4");

        

        node1.next = node4;

        node4.next = node2;

        

        System.out.println(node1.next.next.next.data);

        

        System.out.println("--------------------------");

        

        node1.next = node2;

        node4.next =null;

        

        System.out.println(node1.next.next.data);

    }

}


 

86、双向循环链表:

public class Node2 {

 

    

    Node2 previous;

    String data;

    Node2 next;

    

    Node2(String data){

        this.data = data;

    }

}

 

public class TestNode2 {

 

    

    public static void main(String[] args) {

        

        Node2 node1 = new Node2("node1");

        Node2 node2 = new Node2("node2");

        Node2 node3 = new Node2("node3");

        

        node1.next = node2;

        node2.previous = node1;

        node2.next = node3;

        node3.previous = node2;

        node1.previous = node3;

        

        System.out.println("-------------------");

        

        Node2 node4 = new Node2("node4");

        

        node1.next = node4;

        node4.previous = node1;

        

        node4.next = node2;

        node2.previous = node4;

        

        System.out.println("-------------------");

        

        node1.next = node2;

        node2.previous = node1;

        

        node4.next =null;

        node4.previous =null;

    }

}


 

87、关于ArrayList与LinkedList的比较分析:

A)ArrayList底层采用数组实现,LinkedList底层采用双向链表实现。

B)当执行插入或者删除操作时,采用LinkedList比较好。

C)当执行搜索操作时,采用ArrayList比较好。

 

===============================以上文字出自张龙老师的视频================================

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值