第9章 集合

第9章 集合

9.1 Java集合框架

  • 队列 Queue 实现:循环数组(有界集合、容量有限)、链表(对象数量没有上限、效率不如数组);
  • Collection:集合类的基本接口;
  • Iterator:next()、hasNext() 、remove();(for each 可以处理实现了Iterable接口的对象)
// Collection
iterator();
size();
isEmpty();
contains();
containsAll();
add();
addAll();
remove();
removeAll();
retainAll();
clear();
toArray();
// Map
put(key, value);
get(key);
// List
add(index, element);
get(index);
set(index, element);

9.2 集合框架中的接口

在这里插入图片描述

9.3 具体集合

在这里插入图片描述

  • LinkedList可以使用ListIterator双向遍历链表元素,以及添加和删除元素(不支持快速随机访问);
  • TreeSet:有序集合(红黑树),需提供比较方法(实现Comparable接口);
  • PriorityQueue:堆(获取最小元素、自动排序);

9.4 映射

getOrDefault(key, default);
// 映射视图
keySet();
values();
entrySet();  // Map.Entry<key, value> entry: staff.entrySet()
entry.getKey(); entry.getValue();
// 弱散列映射 (解决不会从映射中删除键/值对问题)
WeakHashMap

9.5 视图与包装器

// 静态方法(集合不可修改)  元素、键或者值不能为null
List<String> names = List.of("Peter", "Paul", "Mary");
var names = new ArrayList<>(List.of("Peter", "Paul", "Mary"));  // 可修改
Set<Integer> numbers = Set.of(1, 2, 3);
Map<String, Integer> scores = Map.of("Peter", 1, "Paul", 2, "Mary", 3);
// 获得子范围视图
var name = names.subList(1, 2);
// 对子范围的操作会反映到整个集合
name.clear();  // names 减少
// 不可修改视图
Collections.unmodifiableCollection();
Collections.unmodifiableList();
Collections.unmodifiableSet();
......
// 同步视图
var map = Collections.sybchronizedMap(new HashMap<String, Employee>());
// 检查型视图
List<String> safeStrings = Collections.checkedList<strings, String.class);

9.6 算法

// 排序
Collections.sort(...);  // 实现Comparable接口
Collections.reverseOrder();
Collections.shuffle();

Collections.binarySearch(c, element);  // 适用于随机访问
Collections.replaceAll();
// 集合与数组转换
var staff = new HashSet<>(List.of(values));  // String[] values = ...;
Object[] values = staff.toArray(); // 返回Object[]数组,不能改变它的类型
String[] values = staff.toArray(new String[0]);

9.7 遗留的集合

// 属性映射 易于读取文件
var settings = new Properties();
// 键值都是字符串
settings.setProperty("widty", "600.9");
// 位集
BitSet();
set();
get();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值