List接口、基本数据类型包装类、List的实现类、泛型

一、List接口

(一)概述

1.是Collection的子接口

2.特点

(1)有序:元素的存储顺序和获取顺序保持一致

(2)可重复:允许存储重复的元素

(3)可重复的原因:有索引

3.特有方法

(1)add(int index, E element):将指定元素插入到集合的指定位置

(2)remove(int index):删除指定索引上的元素

(3)set(int index, E element):用指定元素替换指定索引上的原有元素

(4)get(int index):返回指定索引上的元素

(二)第三种遍历

1.针对List集合特有的遍历方式,Collection中不一定能使用,Set中肯定不能用

2.可以通过size方法获取集合的长度,进而就能得到集合的索引范围,再配合get方法获取每一个元

(三)并发修改异常

1.ConcurrentModificationException

2.原因:再使用迭代器对象遍历集合的时候,通过集合对象操作集合

3.避免方式:

(1)集合遍历集合修改

(2)迭代器遍历迭代器操作

4.List特有的迭代器:listIterator()

(1)List特有迭代器中新增许多便于操作的方法

(2)ListIterator是Iterator的子接口

(3)再List集合中要调用方法获取这个迭代器,方法为:listIterator()

二、基本数据类型包装类

(一)概述

1.基本数据类型有八种,都是简单的数据

2.再这些基本数据类型中,只能表示简单的数据,不能包含一些操作数据的方法,并且也不是对

象,所有的逻辑都需要自己去定义,比较麻烦,将基本数据类型封装为一个Java类,类中还提供了

操作基本数据类型的方法,以及将基本数据类型和其他数据类型进行转换的一些方法

 (二)自动拆装箱(JDK5)

1.装箱和拆箱

(1)装箱:将基本数据类型,封装为包装类的对象,这个过程就是装箱

(2)拆箱:将包装类中的基本数据类型解析出来

2.自动拆装箱

(1)自动装箱:可以直接使用基本数据类型的数据,给引用数据类型赋值

(2)自动拆箱:可以直接使用基本数据类型包装类的对象,给基本数据类型赋值,或者直接参与

运算

三、List的实现类

(一)概述

1.List是一个接口,无法直接创建一个对象,所以根据底层实现类的不同,具有不同的实现

2.Vector:数组实现,顺序存储

3.ArrayList:数组实现,顺序存储

4.LinkedList:链表实现,节点存储

(二)Vector

1.再JDK1.0版本出现,这个类已经过时,再1.2时期被ArrayList替代

2.特点

(1)线程安全,效率低

(2)顺序存储,增删较慢

(三)ArrayList

1.是List的子实现类

2.存储方式

(1)数组实现,顺序存储

(2)增删较慢,查询快(增删之后,索引打乱,需要进行索引重排;查询依靠索引直接找到)

(3)通过物理内存结构实现位置关系,来表示逻辑顺序的相邻

(四)LinkedList

1.LIst接口的子实现类

2.存储方式

(1)节点实现,链式存储

(2)不是通过物理结构实现相邻关系,是通过逻辑顺序实现的相邻关系

(3)每一个节点中,既存储了元素,又存储了相邻节点的地址,通过地址实现前后的逻辑关系

3.特点

(1)查询慢:需要根据前面的节点来获取后一个节点的地址,前面所有的节点都要访问一遍,节

点数量越多,查询的速度越慢

(2)增删快:增加或删除一个元素,只需要修改相邻的节点中的地址即可

4.LinkedList特有方法:由于底层的特性,专门针对性的提供了再头部尾部增删的操作

(1)addFirst(E e):将指定元素插入到列表头部

(2)addLast(E e):将指定元素插入到列表尾部

(3)getFirst():返回头部元素

(4)getLast():返回尾部元素

(5)removeFirst():删除头部元素并返回

(6)removeLast():删除尾部元素并返回

四、泛型

(一)泛型的概述和使用

1.泛型:广泛的类型,再定义类的时候,某些方法的参数列表或者返回值类型不确定,就是用一个

符号,来表示那些尚未确定的类型,这个符号就是泛型

2.格式

ArrayList<Integer>  list = new ArrayList<>();

3.泛型的好处

(1)提高了数据的安全性,将运行期的问题提前暴露再编译期

(2)避免了强转的麻烦

4.注意事项

(1)泛型必须书写为引用数据类型,不能写为基本数据类型

(2)泛型书写的时候,必须保证前后一致

(3)泛型的推断:如果等号左侧的泛型已经写好,右侧可以不用写,会自动根据前面的泛型确定

为一样的类型,右侧直接写一个菱形,所以也叫做菱形泛型,这是JDK7的新特性

(二)泛型类的定义

1.泛型类:带泛型的类

2.格式

class 类名<泛型1, 泛型2...> { 类的内容; }

3.说明

(1)类后面跟着的泛型类型是泛型的声明,一旦泛型声明出来,就相当于这个类未来会有一个已

知类型,这个类型就可以再类中使用

(2)泛型类型的声明:只要是一个合法标识符即可,一般使用单个字母的大写:T(Type)、E(Element)、K(Key)、V(Value)

(四)泛型方法

1.在方法的声明上,带上泛型就是泛型方法

2.格式

权限修饰符 <泛型1, 泛型2, 泛型3...> 返回值类型 方法名称(参数列表) { 方法体; }

3.说明

(1)在方法上声明泛型,可以在整个方法中作为已知参数进行使用

(2)非静态方法,没有声明任意泛型,可以直接使用类的泛型,如果自己定义了泛型,既可以只

使用自己的泛型,也可以方法泛型类的泛型一起使用

(3)静态方法不能使用类的泛型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值