基于API的类的学习day04——List

基于API的类的学习day04——List

List(I):

1)特点:
 a.List是有顺序的接口,所以是有序列表,并且可以使用index定位
 b.List允许有重复值
 c.List中允许有null

2)常用API(只要带有index,都是List新增的方法):
 void add(int index, E element)
 boolean addAll(int index, Collection<? extends E> c)
 E get(int index)
 int lastIndexOf(Object o)
 E remove(int index)
 E set(int index, E element)
 List subList(int fromIndex, int toIndex) - 截取子集合

3)常见实现类:
 (1)ArrayList( C ):
 a.底层数据结构:顺序结构
 b.底层实现:数组
 c.特点:
  ①.按照顺序排列,每个元素都带有标号
  ②.除了有标号是连续的,内存中的物理空间也是连续的
 d.优缺点:
  优点: 查询速度快(因为有连续的下标,可以根据下标进行查询)
  缺点:
   a.插入/删除速度慢(插入/删除都是要移动元素的,所以元素一多就会执行效率慢)
   b.内存的物理空间是连续的,利用不到碎片空间

Vector( C )

 a.底层数据结构:顺序结构
 b.底层实现:数组
 c.特点:
  ①.全部和ArrayList一样
  ②.Vector上带有线程同步锁(synchronized),所以是线程安全的,效率低
 d.优缺点:全部和ArrayList一样

LinkedList( C )

 a.底层数据结构:链式结构
 b.底层实现:Node节点(data[数据] + next[下一个节点的引用])
 c.特点:
  ①.LinkedList是双向链表
  ①.链表是内存中固定顺序,但是他的物理空间不连续
  ②.没有下标
  ③.所有节点的访问,都必须通过头节点(next)/尾节点(pre)
  ④.head(头节点): 只存next,不存data
   last(尾节点): 只存pre,不存data
  ⑤.head.next = null -> 空链表
   last.pre = null -> 空链表

 d.优缺点:
  优点:
   a.插入/删除效率高
   b.不需要连续的内存物理空间,所以空间利用率高
  缺点:
   查询效率低,只能从头节点出发开始查询

 e.LinkedList独有的API:
 (只要带有First/last的方法)
 void addFirst(E e)
 void addLast(E e)
 E getFirst()
 E getLast()
 E remove(int index)
 E removeFirst()
 E removeLast()

常见面试题:

 A.ArrayList 和 LinkedList的区别
  a.数据结构
  b.ArrayList -> 增删慢,查询快
  LinkedList -> 增删快,查询慢

 总结:
 在使用List集合时,会选择ArrayList,在综所有条件之后,ArrayList插入和查询的效率高于LinkedList.

 B.ArrayList 和 Vector的区别
  a.线程安全
  ArrayList不带锁,线程不安全,效率高
  Vector带锁,线程安全,效率低
  b.扩容问题
  ArrayList扩容为原容量的1.5倍
  Vector扩容为原容量的2倍

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值