Java容器学习(3)
【摘要】 ArrayList 类【数组序列】实现了 List 接口,内部使用 Object 数组存储:可以高效地按索引进行元素修改和查询。添加元素时动态扩容:当容量满后,ArrayList 类会新建一个 1.5 倍容量的新数组,然后将当前数组数据全部复制过去。ArrayList 构造方法List<Integer> list = new ArrayList<>(); // 默认...
ArrayList 类
【数组序列】实现了 List 接口,内部使用 Object 数组存储:
- 可以高效地按索引进行元素修改和查询。
- 添加元素时动态扩容:当容量满后,ArrayList 类会新建一个 1.5 倍容量的新数组,然后将当前数组数据全部复制过去。
ArrayList 构造方法
List<Integer> list = new ArrayList<>(); // 默认初始容量为 10
List<Integer> list = new ArrayList<>(100); // 自定义初始容量
List<Integer> list = new ArrayList<>(queue); // 构造时直接复制其他容器元素(可以是任何 Collection 类)
List list = new ArrayList(); // 未指定元素类型则为 Object 类Copy to clipboardErrorCopied
LinkedList 类
【链表序列】实现了 List 和 Deque 接口。内部使用双向链表存储:
- 可以高效地进行元素插入和删除。
- 容量无限。
LinkedList 构造方法
List<String> list = new LinkedList<>(); // 创建空对象
List<String> list = new LinkedList<>(queue); // 复制其他容器元素Copy to clipboardErrorCopied
ArrayDeque 类
【数组双端队列】实现了 Deque 接口。内部使用 Object 数组存储(不允许存储 null 值):
- 可以高效进行元素查找和尾部插入取出,是用作队列、双端队列、栈甚至递归树的绝佳选择。
- 添加元素时动态扩容:当容量满后,ArrayDeque 类会新建一个 1.5 倍容量的新数组,然后将当前数组数据全部复制过去。
ArrayDeque 构造方法
ArrayDeque<String> queue = new ArrayDeque<>(); // 创建空对象
ArrayDeque<String> queue = new ArrayDeque<>(list); // 复制其他容器元素Copy to clipboardErrorCopied
PriorityQueue 类
【无界优先级队列】实现了 Queue 接口。内部使用 Object 数组存储(不允许存储 null 值):
- PriorityQueue 类内会自动对元素进行排序,是作为堆的绝佳选择。但实际在数组中并不是有序存储,而只保证队首元素是最小值:每次弹出队首元素后会自动查找剩余队列中的最小元素放到队首。
- 添加元素时动态扩容:当容量满后,PriorityQueue 类会新建一个 1.5 倍容量的新数组,然后将当前数组数据全部复制过去。
PriorityQueue 构造方法
开发者在构造队列时可通过重写 compare 方法自定义排序规则。如果存储未重写 compareTo 方法的自定义对象,则必须重写 compare 方法。
// 默认排序方法
PriorityQueue<Integer> queue = new PriorityQueue<Integer>();
// 自定义排序方法(Lambda 表达式)
PriorityQueue<Student> queue = new PriorityQueue<Student>((s1, s2) -> {
if(s1.getScore() == s2.getScore()){
return s1.getName().compareTo(s2.getName());
}
return s1.getScore() - s2.getScore();
});
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)