Java 集合框架
Java 集合框架提供了一套性能优良、使用方便的接口和类,它们位于 java.util 包中
Collection 接口
Collection 接口存储一组不唯一,无序的对象,提供了对集合进行排序、遍历等多种算法实现
Collection 接口常用通用方法还有:clear()、isEmpty()、iterator()、toArray()
List 接口
List 接口存储一组不唯一,有序(插入顺序)的对象
List 接口的实现类
ArrayList 实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率 比较高
ArrayList 与 LinkedList 的区别
ArrayList:内部使用数组实现,遍历查询效率高
LinkedList:内部使用双向链表实现,增删改效率高
ArrayList 常用方法:
方法名 | 说明 |
---|---|
boolean add(Object o) | 在列表的末尾顺序添加元素,起始索引位置从0开始 |
void add(int index,Object o) | 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 |
int size() | 返回列表中的元素个数 |
Object get(int index) | 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 |
boolean contains(Object o) | 判断列表中是否存在指定元素 |
boolean remove(Object o) | 从列表中删除元素 |
Object remove(int index) | 从列表中删除指定位置元素,起始索引位置从0开始 |
LinkedList 采用链表存储方式,插入、删除元素时效率比较高
LinkedList 集合类
LinkedList 类是 List 接口的一个具体实现类
LinkedList 类用于创建链表数据结构
插入或者删除元素时,它提供更好的性能
LinkedList 常用方法:
方法名 | 说明 |
---|---|
void addFirst(Object o) | 在列表的首部添加元素 |
void addLast(Object o) | 在列表的末尾添加元素 |
Object getFirst() | 返回列表中的第一个元素 |
Object getLast() | 返回列表中的最后一个元素 |
Object removeFirst() | 删除并返回列表中的第一个元素 |
Object removeLast() | 删除并返回列表中的最后一个元素 |
Set 接口
Set 接口存储一组唯一,无序的对象
Set 接口的实现类
HashSet 是 Set 接口常用的实现类
采用对象的 equals() 方法比较两个对象是否相等
注意:set接口不存在下标和 get() 方法
实现遍历 Set 集合
方法1:通过迭代器Iterator实现遍历
Collection 接口的 iterator() 方法创建 terator 对象
Iterator 的对象方法
boolean hasNext():判断是否存在另一个可访问的元素
Object next():返回要访问的下一个元素
//使用迭代器循环打印汽车信息。
System.out.println("迭代器循环打印汽车信息:");
Iterator iterator = cars.iterator(); //使用迭代器
//循环迭代器 hasNext() 判断是否存在下一个元素
while (iterator.hasNext()){
System.out.println(iterator.next());
}
方法2:增强型for循环
Map 接口
Map接口存储一组键值对象,提供key到value的映射,最常用的实现类是HashMap
Map 接口常用方法
方法名 | 说明 |
---|---|
Object put(Object key, Object val) | 以“键-值”对的方式进行存储 |
Object get(Object key) | 根据键返回相关联的值,如果不存在指定的键,返回null |
Object remove(Object key) | 删除由指定的键映射的“键-值对” |
int size() | 返回元素个数 |
Set keySet() | 返回键的集合 |
Collection values() | 返回值的集合 |
boolean containsKey(Object key) | 如果存在由指定的键映射的“键-值对”,返回true |
遍历 Map 集合
方法1:通过迭代器Iterator实现遍历
方法2:增强型for循环
方法3:键值对
泛型集合
泛型集合可以约束集合内的元素类型,典型泛型集合ArrayList<E>、HashMap<K,V>
其中<E>、<K,V>表示该泛型集合中的元素类型
泛型集合中的数据不再转换为Object
解决强制类型转换时容易出现的异常问题
List的get(int index)方法获取元素
Map的get(Object key)方法获取元素
Iterator的next()方法获取元素
泛型:将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性,其本质是参数化类型
传递的数据类型必须是引用数据类型
//int = Integer
//double = Double
//long = Long
//float = Float
List<Students> students = new ArrayList<>();
Set<Double> sets = new HashSet<>();
Map<Integer, String> map = new HashMap<>();
Collections 算法类
Collections类定义了一系列用于操作集合的静态方法
Collections 类常用方法
Collections 和Collection 不同,前者是集合的操作类,后者是集合接口
Collections 提供的常用静态方法
sort():排序
max() \ min():查找最大\最小值
Collections 排序
Collections 类可以对集合进行排序、查找和替换操作
实现一个类的对象之间比较大小,该类要实现Comparable接口
重写compareTo()方法
public class Students implements Comparable<Students> {
private String name;
private float score;
private int age;
@Override
public int compareTo(Students other) {
// 成绩降序排列
int scoreCompare = Float.compare(other.score, this.score);
if (scoreCompare != 0) {
return scoreCompare;
}
// 成绩相同的情况下按年龄升序排列
return Integer.compare(this.age, other.age);
}