本文参考了知乎作者“Hello浩辰”的Java容器详解Ⅰ——概述和菜鸟教程的相关文章。
一、常用容器
java容器分为两大部分:Collection和Map。Collection是单个元素的集合,又可以分为List、Queue和Set。Map用来存储一组键值对,又可以分为HashMap和TreeMap。
二、List列表
List的特点就是所有的元素是可以重复的。
1. ArrayList
ArrayList是一个可以动态增长的数组, ArrayList由于底层是使用数组实现的,所以随机访问速度快,插入删除较慢。
(1) 常用方法:
add():添加元素addAll():将集合中的所有元素添加到ArrayList中clear():清空元素contains():判断元素是否在ArrayList中get():根据索引获取元素remove():根据索引删除元素size():返回ArrayList大小set():根据索引修改元素
(2) 实例:
package ecnu.cn; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; public class MyTest {
public static void main(String[] args) {
ArrayList<String> sites = new ArrayList<String>(); // 增加元素 sites.add("Zhihu"); sites.add("Google"); sites.add("Taobao"); sites.add("Runoob"); sites.add("Temp"); // 修改元素 sites.set(2, "Tianmao"); // 删除元素 sites.remove(4); // 获取元素 System.out.println("下标为1的元素:" + sites.get(1)); // 获取大小 System.out.println("size: " + sites.size()); // 判断元素是否存在 System.out.println("Taobao是否存在:"+sites.contains("Taobao")); // 使用迭代器遍历 Iterator<String> it = sites.iterator(); while (it.hasNext()) {
System.out.print(it.next() + " "); } System.out.println("\n"); // 普通遍历 for (int i = 0; i < sites.size(); i++) {
System.out.print(sites.get(i) + " "); } // 排序 Collections.sort(sites); // 遍历 for (String site : sites) {
System.out.print(site + " "); } System.out.println("\n"); // 清空 sites.clear(); System.out.println("size: " + sites.size()); } }
讯享网
(3) 使用场景:
- 频繁访问列表中的某一个元素。
- 只需要在列表末尾进行添加和删除元素操作。
2. LinkedList
LinkedList是使用双向链表实现的,在列表中插入和删除速度快,但是查找需要遍历整个链表,速度较慢。使用LinkedList可以实现很多队列、栈的数据结构。
(1) 常用方法:
add():添加元素addFirst():在头部添加元素addLast:在尾部添加元素addAll():将集合中的所有元素添加到LilnkedList中clear():清空元素contains():判断元素是否在LilnkedList中get():根据索引获取元素getFirst():获取头部元素getLast():获取尾部元素remove():根据索引删除元素removeFirst():删除头部元素removeLast():删除尾部元素size():返回LilnkedList大小set():根据索引修改元素
(2) 实例:
讯享网package ecnu.cn; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; public class MyTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<>(); // 增加元素 sites.add("Zhihu"); sites.add("Google"); sites.add("Taobao"); // 在头部添加 sites.addFirst("Runoob"); // 在尾部添加 sites.addLast("Temp"); // 修改元素 sites.set(2, "Tianmao"); // 普通遍历 // size()获取大小 for (int i = 0; i < sites.size(); i++) {
// 获取元素 System.out.print(sites.get(i) + " "); } System.out.println("\n"); // 删除元素 sites.remove(4); // 删除头部元素 sites.removeFirst(); // 删除尾部元素 sites.removeLast(); // 获取first元素 System.out.println("First:" + sites.getFirst()); // 获取last元素 System.out.println("Last: "+sites.getLast()); // 判断元素是否存在 System.out.println("Taobao是否存在:"+sites.contains("Taobao")); // 使用迭代器遍历 Iterator<String> it = sites.iterator(); while (it.hasNext()) {
System.out.print(it.next() + " "); } System.out.println("\n"); // 排序 Collections.sort(sites); // 遍历 System.out.println("排序后:"); for (String site : sites) {
System.out.print(site + " "); } System.out.println("\n"); // 清空 sites.clear(); System.out.println("size: " + sites.size()); } }
(3) 使用场景:
- 你需要通过循环迭代来访问列表中的某些元素。
- 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
3. Vector
Vector是一个已经被弃用的类,因为他是线程同步的,而我们平时使用的时候都是非同步的,使用同步的坏处就是会在一个记录上加锁,防止多个程序访问同一条数据导致数据不同步。这样会导致访问速度变慢。
三、Queue队列
队列是一个满足“先进先出”的数据结构。
1. LinkedList
LinkedList提供了方法支持队列操作,并且实现了Queue接口,所以LinkedList是队列的一种实现,可以通过LinkedList向上转型为Queue。
2. PriorityQueue
PriorityQueue是优先级队列。
四、Set集合
集合中的元素不可以重复。
1. HashSet
- HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。

- HashSet 允许有 null 值。
- HashSet 是无序的,即不会记录插入的顺序。
- HashSet 不是线程安全的, 如果多个线程尝试同时修改 HashSet,则最终结果是不确定的。 您必须在多线程访问时显式同步对 HashSet 的并发访问。
- HashSet 实现了 Set 接口。
(1) 常用方法
add():添加元素addAll():将集合中的所有元素添加到HashSet中clear():清空元素contains():判断元素是否在HashSet中remove():根据索引删除元素size():返回HashSet大小
(2) 实例
package ecnu.cn; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; public class MyTest {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<>(); // 增加元素 sites.add("Zhihu"); sites.add("Google"); sites.add("Taobao"); sites.add("Runoob"); sites.add("Temp"); // 删除元素 sites.remove(4); // 判断元素是否存在 System.out.println("Taobao是否存在:"+sites.contains("Taobao")); // 使用迭代器遍历 Iterator<String> it = sites.iterator(); while (it.hasNext()) {
System.out.print(it.next() + " "); } System.out.println("\n"); // 遍历 for (String site : sites) {
System.out.print(site + " "); } System.out.println("\n"); // 清空 sites.clear(); System.out.println("size: " + sites.size()); } }
2. TreeSet
TreeSet底层使用的是红黑树。
五、Map映射
Map是使用键值对存储的一种结构,所以在处理列如单词统计等方面是杀手锏。
1. HashMap
HashMap更适合查找、删除、插入。
- HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
- HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
- HashMap 是无序的,即不会记录插入的顺序。
- HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
(1) 常用方法
clear():清空HashMapsize():获取大小put():添加键值对putAll():将所有键值对添加到HashMap中containKey():是否包含keycontainValue():是否包含valueget():根据key获取valuekeySet():获取key的集合values():获取所有value
(2) 实例
讯享网package ecnu.cn; import java.util.HashMap; import java.util.Iterator; public class MyTest {
public static void main(String[] args) {
HashMap<Integer, String> sites = new HashMap(); // 增加元素 sites.put(1, "Zhihu"); sites.put(2, "Google"); sites.put(3, "Taobao"); sites.put(4, "Runoob"); sites.put(5, "Temp"); // 删除元素 sites.remove(4); // 是否包含key System.out.println("是否包含为5的key:"+sites.containsKey("5")); // 是否包含value System.out.println("是否包含为Taobao的value:"+sites.containsValue("Taobao")); // 遍历 // 获取所有key的集合 for (Integer key : sites.keySet()) {
// 根据key获取value System.out.println("key: " + key + " value: " + sites.get(key)); } System.out.println(); // 遍历所有的值 for (String value : sites.values()) {
System.out.print(value + " "); } System.out.println("\n"); // 清空 sites.clear(); System.out.println("size: " + sites.size()); } }
2. TreeMap
TreeMap更适合遍历。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/120729.html