java第十二课

集合容器

数组(array)有什么缺点:

  1. 在创建数组的时候,就需要定死长度,在运行过程中需要判断剩余长度,并动态扩容
  2. 在中间插入的时候,需要将后面的元素进行后移
  3. 在中间删除的时候,需要将后面的元素进行前移

数组的封装类 - 列表(ArrayList)

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

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

ArrayList();

ArrayList(int);//一般不用

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

elementDate

size

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

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

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

set(int,E) 修改数组指定位置的元素

remove(int) 根据索引删除

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

get(int) 根据指定的索引找到某个位置并返回

ArrayList类中的”E”是什么?

泛型

用泛型来实现类中数据类型(可以是参数类型,可以是返回值类型,可以是任意变量的类型,可以是向下转型的类型)的未知

作者在编写的时候用E来表达未知数据类型,调用者在使用的时候可以给出E的具体的类型,也可以不给,不给的话,E=Object;//多态指针

如果给出E的具体类型,是在声明指针的时候给出

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

ArrayList<String> al1=new ArrayList();//单态指针

ArrayList<Car> al2=new ArrayList();

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

 

双向链表类 LinkedList

底层:Node(节点)对象

构造方法

成员变量

成员方法

  1. 增:addFirst(E) 在头部添加

addLast(E) 在尾部添加

add(E) 在尾部追加

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

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

数组在尾部插入很快,但是其他比较慢,因为要后移

  1. 删:removeFirst() 删除头部

removeLast() 删除尾部

Remove(int) 根据指定位置删除

Remove(object) 根据指定元素删除

  1. 改:set(int,E)
  2. 查:get(int)

链表并没有索引的机制,所以需要二分查找法遍历链表找到指定位置的节点,并返回节点的item;数组的查找要优于链表

中间插入和删除,链表优于数组,原因是数组需要前移和后移

查询和修改,数组优于链表,原因是链表没有索引号

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

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

 

节点的双向链表表示:

 

遍历ArrayList和LinkedList的几种方式:

  1. 普通for循环
  2. 增强型for循环
  3. forEach循环
  4. 迭代器

Array和ArrayList的区别是什么?

Array是数组ArrayList是类

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

ArrayList的底层是Array

ArrayList和LinkedList的区别是什么?

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

整理ArrayList和LinkedList的常用方法

ArrayList

方法名

参数说明

返回值说明

方法功能说明

add(E e)

泛型

boolean

将指定的元素追加到此列表的末尾

size()

无参

return size;

返回此列表中的元素个数

get(int index)

int

泛型

返回此列表中指定位置的元素

remove(int index)

int

泛型

删除该列表中指定位置的元素

remove(Object o)

Object

boolean

从列表中删除指定元素的第一个出现(如果存在)

contains(Object o)

Object

boolean

如果此列表包含指定的元素,则返回 true

addAll(int index, Collection<? extends E> c)

int

泛型

boolean

将指定集合中的所有元素插入到此列表中,从指定的位置开始

clear()

无参

void

从列表中删除所有元素

for / iterator

无参

泛型

集合遍历

LinkedList

方法名

参数说明

返回值说明

方法功能说明

add(E e)

泛型

boolean

return true;

将指定的元素追加到此列表的末尾

size()

无参

int

return size;

返回此列表中的元素数

get(int index)

int

泛型

返回此列表中指定位置的元素

remove(int index)

int

泛型

删除该列表中指定位置的元素

remove(Object o)

Object

boolean

从列表中删除指定元素的第一个出现(如果存在)

addFirst(E e)

泛型

void

在该列表开头插入指定的元素

addLast(E e)

泛型

void

将指定的元素追加到此列表的末尾

getFirst()

无参

泛型

返回此列表中的第一个元素

getLast()

无参

泛型

返回此列表中的最后一个元素

push(E e)

泛型

void

将元素推送到由此列表表示的堆栈上

pop()

无参

泛型

从此列表表示的堆栈中弹出一个元素

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值