初学Java-day12

1.ArrayList和LinkedList的区别在哪四个方面?

2.ArrayList底层数据结构是_____, LinkedList的底层数据结构_____.

3.ArrayList类中的那个“E”到底是什么?

4.链表不存在扩容。()

5.从查询的角度来看,链表的性能远远优于数组。()

ArrayList和LinkedList的区别是什么?


1.底层数据结构实现︰ArrayList底层数据结构是动态数组,而 LinkedList的底层数据结构是双向链表
2.随机访问(即读)效率∶ArrayList比LinkedList在随机访问的时候效率要高,因为ArrayList底层是数组,可以通过索引号快速访问,LinkedList是通过二分查找法遍历链表节点进行查找的
3.增加和删除效率∶在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为ArrayList增删操作需要大量的前移或后移,这个过程中涉及到大量的赋值操作比较耗时间,LinkedList只需要修改节点对象的左右指针即可。
4.内存空间占用:LinkedList 比 ArrayList更占内存,因为 LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
5.综合来说,在需要频繁读取集合中的元素时,更推荐使用ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。

ArrayList类中的那个“E”到底是什么?

泛型技术

用泛型来实现类中数据类型的未知

        ---作者在编写的时候未知数据类型

        ---调用者在使用的时候,可以给出E的具体类型,也可以不给出,

        如果给出E的具体类型,是在构造ArrayList对象的时候给出

        例如:E=String,E=Car,E=Dog

        不给的话就是E=Object

        给出E的具体数据类型的语法

        ArrayList<String> al1=new ArrayList();   

        ArrayList<Car> al2=new ArrayList();   

(可以是参数类型,可以是返回值类型,可以是任意变量的类型,可以是向下转型的类型)

用泛型的好处是:被调用方可以帮调用方写向下转型的代码

集合容器

数组(Array)有什么缺点?

Array不是类,是一种特殊的数据类型

1.在创建数组的时候,就需要定死长度,在运行过程中。需要判断剩余长度,并动态扩容

2.在中间插入的时候,需要将后面的元素进行后移

3.在中间删除的时候,需要将后面的元素进行前移

4.数组中的所有的元素都是同一种类型

Array和ArrayList的区别是什么?


Array是数组,ArrayList是类
Array是定长的(需要手动扩容),ArrayList长度可变(使用过程中自动扩容)
ArrayList的底层是Array

数组的封装类 ——列表/集合(ArrayList)

数组的特点:有序的,不唯一的

-找源码

-构造方法        先研究如何构造对象       3个方法

        ArrayList()

        ArrayList(int)

-成员变量        研究构造出来的对象中有什么

        elementData

        size

-成员方法        研究如何操作对象中的成员

        add(int) -在数组尾部的第一个不为空的位置添加

        add(int,E)-在数组中的指定位置插入

        set(int,E) -修改数组指定位置

        remove(int)-根据索引号移除

        remove(Object)-根据指针移除,如果存在多个,只会移除第一个

        get(int) -根据指定的索引号找到某个元素并返回

ArrayList类中的那个“E”到底是什么?

泛型技术

用泛型来实现类中数据类型的未知

        ---作者在编写的时候未知数据类型

        ---调用者在使用的时候,可以给出E的具体类型,也可以不给出,

        如果给出E的具体类型,是在构造ArrayList对象的时候给出

        例如:E=String,E=Car,E=Dog

        不给的话就是E=Object

        给出E的具体数据类型的语法

        ArrayList<String> al1=new ArrayList();   

        ArrayList<Car> al2=new ArrayList();   

(可以是参数类型,可以是返回值类型,可以是任意变量的类型,可以是向下转型的类型)

用泛型的好处是:被调用方可以帮调用方写向下转型的代码

双向链表封装类   LinkedList

底层:Node  对象

        Node  ---节点

-构造方法 

-成员变量

-成员方法

        增

        1.addFirst(E) 在头部添加

        2.addLast(E) 在尾部添加

        3.add(E) 在尾部追加

        4.add(int,E)在指定位置插入

数组:遍历数组,指定位置后面的元素要后移

链表:遍历链表,指定位置的节点指针修改

链表在中间插入的速度要优于数组,只需要找到插入位置的节点,创建新节点,然后修改指针即可

数组在尾部插入新快,但是在首部或者中间插入,比较慢,因为需要后移

       

        1.removeFirst() 删除头部

        2.removeLast()删除尾部

        3.remove(int)根据指定位置删除

        4.remove(Object)根据指定元素删除

        改

       set(int,E);

        查

        get(int)链表没有索引的机制,底层通过遍历链表,通过二分查找法找到指定位置的节点,并返回节点中的item

从查询的角度来看,数组的性能远远优于链表

直接插入和删除,链表优于数组

查询和修改,数组优于链表

链表不存在扩容和转移,数组需要。

ArrayList和LinkedList的区别是什么?


1.底层数据结构实现︰ArrayList底层数据结构是动态数组,而 LinkedList的底层数据结构是双向链表
2.随机访问(即读)效率∶ArrayList比LinkedList在随机访问的时候效率要高,因为ArrayList底层是数组,可以通过索引号快速访问,LinkedList是通过二分查找法遍历链表节点进行查找的
3.增加和删除效率∶在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为ArrayList增删操作需要大量的前移或后移,这个过程中涉及到大量的赋值操作比较耗时间,LinkedList只需要修改节点对象的左右指针即可。
4.内存空间占用:LinkedList 比 ArrayList更占内存,因为 LinkedList的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。
5.综合来说,在需要频繁读取集合中的元素时,更推荐使用ArrayList,而在插入和删除操作较多时,更推荐使用 LinkedList。

LinkedList的内部类    -Node类(用于创建双向链表z中的节点对象)

 

 遍历ArrayList和LinkedList的几种方式

1.普通for循环

2.增强型for循环

3.forEach循环

4.迭代器

整理ArrayList和LinkedList的常用方法

 

 

正在上传…重新上传取消

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值