目录
程序场景
分析1:
分析以上问题,发现数组在存储对象数据时存在一些明显的缺陷:
1:数组长度固定不变,不能很好地适应元素数量动态变化的情况。
2:通过数组名.length获取数组的长度,却无法直接获取数组中实际存储的元素个数。
3:数组采用在内存中分配连续空间的方式存储,根据元素信息查找时效率比较低,需要多次比较。
分析2:针对数组的缺陷,Java提供了比数组更灵活、更实用的集合框架,可大大提高软件的开发效率,并且不同的集合可适用于不同的应用场合。
分析3:如果并不知道程序运行时会需要多少对象,或者需要更复杂方式存储对象——可以使用Java的集合框架
Java集合框架包含的内容
Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
Collection接口
Collection接口存储一组不唯一,无序的对象
List 接口继承Collection接口,存储一组不唯一,有序(插入顺序)的对象
Set 接口存储一组唯一,无序的对象
List接口
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高。
LinkedList采用链表存储方式。插入、删除元素时效率比较高
List接口的常用方法(不是所有的方法)
LinkedList集合类
LinkedList的特殊方法
ArrayList与LinkedList对比
Set接口
- Set 接口存储一组唯一,无序的对象
- Set 接口常用的实现类:HashSet
- HashSet 集合的特点集合内的元素是无序排列且不允许重复。
HashSet集合的查找效率高。
允许集合元素值为null.
Map接口
- Map接口存储一组键值对象,提供key到value的映射
- Map接口常用的实现类HashMap
- HashMap类的特点
- 不保证映射的顺序,特别是不保证顺序恒久不变
- 数据添加到HashMap集合后,所有数据的数据类型将转换为Object类型,所以从其中获取数据时需要进行强制类型转换。
Map接口的常用方法(不是所有的方法)
遍历HashMap的键集和值集
- 如何遍历HashMap的键集和值集?
- 方法1:增强型for循环
- 方法2:通过迭代器Iterator实现遍历
- 方法3:遍历值集
泛型
- 泛型是JDK1.5的新特性。
- 泛型的本质是参数化类型:将所操作的数据类型指定为一个参数,使代码可以应用于多种类型。
- 泛型的定义:将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性。
- 泛型的优点
- 所有强制转换都是自动和隐式进行的,安全简单。
- 提高了代码的重用率
泛型集合
- DK1.5中使用泛型改写了集合框架中的所有接口和类,也就是泛型集合
- 典型的泛型集合ArrayList<E>、HashMap<K,V>
- <E>、<K,V>表示该泛型集合中的元素类型
- 泛型集合中的数据不再转换为Object
- 前面讲到的LinkedList、HashSet等也有自己的泛型形式。
- 泛型集合的优点
- 存储数据时进行严格类型审查,确保只有合适类型的对象才能存储在集合中。
- 从集合中检索对象时,减少了强制类型转换。
除了指定了集合中的元素类型外,泛型集合和之前学习的集合的用法完全一样
Collections算法类
Collections类是Java提供的一个集合操作工具类。
Collections类定义了一系列用于操作集合的静态方法,用于实现对集合元素的排序、查找和替换等操作。
Collections和Collection是不同的,前者是集合的操作类,后者是集合接口
Collections算法类
Collections的常用方法(不是所有的方法)
sort():排序
binarySearch():查找
max()\min():查找最大\最小值
Collections排序
实现一个类的对象之间比较大小,该类要实现Comparable<T>接口
重写 public int compareTo(T o)方法。
如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。
课堂知识
ArrayList默认长度为10
size方法调取的是集合中的元素个数