16、Java——集合:List接口

 1、Collection 集合上层接口

(1)存储单个数据值,多个元素的集合

常用方法,遍历方式

Foreach,迭代器Iterator,Map 多个元素的集合,每个元素由键值对组成

2.List 接口

有序可重复,新增 : 一些根据索引操作的方法,添加null元素

(2)有序:  存放的顺序与内部真实存储的顺序相同

注意: 存储的数据为整数的时候,默认以索引优先

(3)定义: 一个list集合,存储你喜欢的漫威英雄人物

         如果包含灭霸,就向集合中添加一个惊奇队长

List集合遍历方式:

        1.普通for循环

        2.增强for循环

        3.iterator迭代器

​      

   4.listIterator 列表迭代器

 

3、List 接口的实现类 : 有序 可重复

(1)ArrayList

底层实现: 可变数组

①特点:a.根据索引做查询效率高b.增删效率低,设计到新数组的创建,数据的拷贝等问题

②应用场景: 大量做查询,少量做增删的时候适合使用ArrayList

      ③扩容: int newCapacity = oldCapacity + (oldCapacity >> 1); 通过Arrays.copyOf方法实现扩容,每次扩容原容量的1.5倍,第一次添加数据内部构建数组的初始容量为10

      ④新增内容: void forEach(Consumer<? super E> action) 对 Iterable每个元素执行给定操作,直到处理 Iterable所有元素或操作引发异常。

⑤遍历方式:a.普通for;b.增强for;c.iterator迭代器;d.listIterator迭代器

⑥定义ArrayList,存储自定义的javabean类型学生类型数据,简单操作

(2)Vector 向量

有序 可重复,底层结构: 数组与ArrayList很像

①Vector与 ArrayList之间的区别:

  1. 同步问题

ArrayList:线程不安全|不同步,相对效率高,Vector:线程安全|同步

b.扩容问题

    ArrayList:每次扩容原容量的1.5倍,更有利于节约内存,Vector:每次扩容原容量的2倍

(3)注意:

使用集合存储自定义引用数据类型数据时候,需要重写equals方法,使用indexOf,constains()..,默认使用equals的返回值决定是否存在,包含,相等可以实现比较对象的内容,而非地址

4、LinkedList

有序 可重复,底层结构: 双向链表

(1)特点:根据索引查询效率低,做增删效率高

(2)应用场景:大量做增删少量做查询的时候适合使用

(3)新增功能:新增了一些可以直接操作头尾的方法

5、手写LinkedList --> 扩容

​         通过单向链表简单实现

 

 

 

 

 

 

 

 


posted @ 2021-07-26 16:42  孤影_空白  阅读(47)  评论(0编辑  收藏  举报