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的常用方法
正在上传…重新上传取消