认识集合
如果并不知道程序运行时会需要多少对象,或者需要 更复杂方式存储对象——可以使用Java集合框架。Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中。
Collection 接口存储一组不唯一,无序的对象。
List 接口存储一组不唯一,有序(插入顺序)的对象。
Set 接口存储一组唯一,无序的对象。
Map 接口存储一组链值对象,提供key到value的映射。
List接口的实现类
ArrayList 实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高。
经常称ArrayList 为动态数组,但是它不等同于数组,ArrayList 集合中可以添加任何类型的数据,并且添加的数据都将转换为Object类型。
ArrayList 类提供了很多方法用于操作数据:
LinkedList采用链表存储方式,插入、删除元素时效率比较高。它支持实现所有List接口可选的列表的操作,并且允许元素值是任何数据,包括null。
它处理包含ArrayList 类所包含的方法外,还提供了以下方法:
Set接口
Set接口存储一组唯一,无序的对象
Set中存放对象的引用
HashSet是Set接口常用的实现类,有以下特点:
集合内的元素是无序排列的;HashSet类是非线程安全的;允许集合元素值为null。
HashSet类的常用方法如下:
HashSet类不存在get()方法,所以Set接口无法使用普通for循环遍历。
Iterator接口
获取Iterator:Collection 接口的iterator()方法
Iterator的方法:
boolean hasNext():判断是否存在另一个可访问的元素
Object next():返回要访问的下一个元素
Map接口
Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作
最常用的实现类是HashMap
Map接口常用方法:
数据添加到HashMap集合后,所有数据的数据类型将转换为Object类型,所以从其中获取数据时需要进行强制类型转换。
Collections类常用方法
Collections和Collection不同,前者是集合的操作类,后者是集合接口。
Collections提供的常用静态方法:
sort():排序
binarySearch():查找
max()\min():查找最大\最小值
泛型
将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性,这就是泛型,本质就是参数化类型。
JDK1.8使用泛型改写了集合框架中的所有接口和类。
定义语法如下:
类1或者接口<类型实参>对象=new类2<类型实参>();
泛型集合
泛型集合可以约束集合内的元素类型
典型泛型集合ArrayList<E>、HashMap<K,V>
<E>、<K,V>表示该泛型集合中的元素类型
泛型集合中的数据不再转换为Object
除了指定了集合中的元素类型外,泛型集合和之前学习的集合的用法完全一样。