集合框架
Java集合框架体系结构
- Collection接口存储一组不唯一,无序的对象
- List接口存储一组不唯一,有序(插入顺序)的对象
- Set接口存储一组唯一,无序的对象
- Map接口存储一组键值对象,提供key到value的映射(成对出现可以通过key找value,key是唯一的,无序的)
分为四大部分
? 1、Clollection集合
? 2、Map集合
? 3、Inerator迭代器
? 4、Utilities 工具类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SneislhR-1651212730847)(D:\note\Java高级特性\图片笔记\Java集合框架.jpg)]
List接口的实现类
- ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高
- 长度可变的数组
- 遍历元素和随机访问元素
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e1EssHBe-1651212730848)(D:\note\Java高级特性\图片笔记\ArrayList.jpg)]
- LinkedList采用链表存储方式,插入、删除元素时效率比较高
- 链表存储方式
- 插入、删除元素
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vQ1NXLQa-1651212730849)(D:\note\Java高级特性\图片笔记\LinkedList.jpg)]
ArrayList集合类
- ArrayList
- 是List接口的一个具体实现类
- 实现了改变大小的数组
- 随机访问和遍历元素时,他提供更好的性能
- 用到的方法
- add()
- size()
- get()
ArrayList常用方法
方法名 | 说明 |
---|
boolean add(Object o) | 在列表的末尾顺序添加元素,起始索引位置从0开始 | void add(int index,Object) | 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 | int size() | 返回列表中的元素个数 | Object get(int index) | 返回值指定索引位置处的元素。去除的元素是Object类型,使用前需要进行强制类型转换 | boolean contains(Object o) | 判断列表中是否存在指定元素 | boolean remove(Objeact o) | 从列表中删除元素 | Object remove(int index) | 从列表中删除指定位置元素,起始索引位置从0开始 |
Collection接口常用通用方法
使用子接口或子类
Collection接口常用通用方法 | |
---|
add() | 向集合有顺序的添加元素 | size() | 返回元素个数 | contains() | 判断是否存在这个元素 | remove() | 删除元素 | clear() | 集合里的所有元素清空 | isEmpty() | 判断集合是否为空 | itcrator() | 获取遍历一个集合的迭代器 | toArray() | 把一个集合转换成一个序列 转为数组 Object[] toArray()(toArray()返回Object[]的数组) |
断点跟踪ArrayList
随机访问和遍历元素时,它提供更好的性能(插入时的断点过程跟踪)
LinkedList集合类
- LinkedList类是List接口的一个具体实现类
- LinkedList类用于创建链表数据结构
- 插入或者删除元素时,它提供更好的性能
LinkedList独有的方法
方法名 | 说明 |
---|
void addFirst(Object o) | 在列表的首部添加元素 | void addLast(Object 0) | 在列表的末尾添加元素 | Object getFirst() | 返回列表中的第一个元素 | Object getLast() | 返回列表中的最后一个元素 | Object removeFirst() | 删除并返回列表中的第一个元素 | Object removeLast() | 删除并返回列表中的最后一个元素 |
ArrayList可以用父类引用指向子类对象的形式
LinkedList不可以用父类引用指向子类对象的形式
这种写法只能调用父子类公用的方法,无法调用子类独有的方法
LinkedList和ArrayList异同
同 | 异 |
---|
同为List实现类,元素有序、不唯一、长度可变 | ArrayList实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比价高 | 共有Collection及List的通用方法 | LinkedList采用链表存储方式,插入、删除元素时效率比 |
Set接口
for (Object obj:hashSet) {
NewsTitle newsTitle = (NewsTitle) obj;
System.out.println(newsTitle.getTitle()+newsTitle.getAuthor());
}
Iterator遍历Set
Iterator(迭代器)原理
判断下一个有没有元素,如果有元素就把他取出来,如果没有就不会继续往下
Iterator itor = hashSet.iterator();
while (itor.hasNext()){
NewsTitle newsTitle = (NewsTitle) itor.next();
System.out.println(newsTitle.getTitle()+newsTitle.getAuthor());
}
- 迭代器Iterator实现对集合的遍历
- 通过Collection 接口的iterator()方法获取Iterator
- 结合代码对比两种遍历Set的方式
总结
- Collection、List、Set、Map接口的联系和区别
- ArrayList和LinkedList的异同之处及各目的的应用场合
- 遍历集合的方法
- 有序集合:普通for遍历索引、增强型for、迭代器Iterator
- 无序集合:增强型for、迭代器Iterator
Collection接口存储一组不唯一,无序的对象
List接口存储一组不唯一,有序(插入顺序)的对象
Set接口存储一组唯一,无序的对象
Map
Map接口存储一组键值对象,提供key到value的映射
Map接口专门处理键值映射数据的存储,可以根据键实现对值的操作
Map常用方法
| |
---|
put(Object key,Object value) | 向集合添加键值对, | get(Object key) | 通过key获取value,如果找不到则返回null | size() | 获取键值对的对数 | containsKey(Object key) | 如果此映射包含指定键的映射,则返回 true | values() | 返回值的集合 | entrySet() | 获取所有的key和value | containsKey(Object Key) | 如果此映射包含指定键的映射,则返回 true | remove(Object Key) | 删除由指定的键映射的“键-值对” | keySet() | 返回键的集合 |
遍历Map集合元素(三种方法)
- 遍历key(Set:迭代器、增强型for),通过get(key)获取value
- 遍历key-value对
- map.Entryset()-Map.Entry
- getKey()、getValue()
- 注意数据类型转换
遍历Map 思路一:遍历key(key是set),通过key—>value
增强型for
Map countries = new HashMap();
countries.put("China","中国");
countries.put("USA","美国");
countries.put("Japan","日本");
countries.put("France","法国");
Set keys = countries.keySet();
for (Object obj:keys) {
String key = (String) obj;
String value =(String) countries.get(key);
System.out.println(key+"--"+value);
}
迭代器Iterator遍历key的集合(Set类型)
Map countries = new HashMap();
countries.put("China","中国");
countries.put("USA","美国");
countries.put("Japan","日本");
countries.put("France","法国");
Iterator itor = keys.iterator();
while (itor.hasNext()){
String key = (String)itor.next();
String value =(String) countries.get(key);
System.out.println(key+"--"+value);
}
遍历Map 思路二:获取Map中的所有键值对,然后再键值对中分别获取key和value
Map countries = new HashMap();
countries.put("China","中国");
countries.put("USA","美国");
countries.put("Japan","日本");
countries.put("France","法国");
Set set = countries.entrySet();
for (Object obj:set) {
Map.Entry me = (Map.Entry) obj;
String key =(String)me.getKey();
String value =(String) me.getValue();
System.out.println(key+"--"+value);
}
泛型
泛型 约束了集合框架添加元素的安全性,错误类型的元素添加,在编译时不通过
添加泛型之后再遍历的时候不用强制类型转换(添加泛型指定的那个类型,返回的就一定是这个类型)
除了指定集合中的元素类型外,泛型集合和之前学习的集合的用法完全一样
Collections工具类
Collections算法类
Java集合框架针对不同数据结构算法的实现都保存再工具类中
Collections类定义了一系列用于操作集合的静态方法
Collections于Collection的不同
| |
---|
Collection | 集合接口 | Collections | 集合的操作类 |
Collections常用静态方法
reverse() | 反转元素顺序 |
---|
binarySearch() | 查找 | sort() | 排序 | max()/min() | 查找最大\最小值 |
Collections自定义数据类型排序
第一步:该类要实现Comparable接口
第二布:重写compareTo()方法
Java集合框架总结
两种集合类型
- Collection 存储不唯一无序的数据
- Map 如何存储数据,如何遍历,如何使用泛型(重点)
一种迭代器
工具类
实现一个类的对象之间比较大小
- 该类要实现Comparable接口
- 重写compareTo()方法
|