Java中集合的创建及其运用场景

1. List 集合

List 是一个有序集合,允许重复的元素,可以通过索引访问元素。

1.1 ArrayList
  • 创建语法

    java复制

    List<String> arrayList = new ArrayList<>();

    或者初始化时添加元素:

    java复制

    List<String> arrayList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
  • 应用场景

    • 频繁的随机访问ArrayList 基于动态数组实现,随机访问(通过索引访问)非常快,时间复杂度为 O(1)。

    • 元素顺序重要:适用于需要保持元素插入顺序的场景。

    • 较少的插入和删除操作:插入和删除操作可能需要移动大量元素,效率较低。

    示例代码

    java复制

    List<String> fruits = new ArrayList<>();
    fruits.add("apple");
    fruits.add("banana");
    fruits.add("cherry");
    
    System.out.println(fruits.get(1)); // 输出:banana
    fruits.set(1, "orange"); // 替换索引为1的元素
    System.out.println(fruits); // 输出:[apple, orange, cherry]
1.2 LinkedList
  • 创建语法

    java复制

    List<String> linkedList = new LinkedList<>();

    或者初始化时添加元素:

    java复制

    List<String> linkedList = new LinkedList<>(Arrays.asList("apple", "banana", "cherry"));
  • 应用场景

    • 频繁的插入和删除操作LinkedList 基于双向链表实现,插入和删除操作非常快,时间复杂度为 O(1)。

    • 实现队列和栈LinkedList 实现了Deque接口,可以作为双端队列使用,适用于需要频繁从两端添加或删除元素的场景。

    示例代码

    java复制

    List<String> fruits = new LinkedList<>();
    fruits.add("apple");
    fruits.add("banana");
    fruits.add("cherry");
    
    fruits.addFirst("pear"); // 在头部添加元素
    fruits.addLast("grape"); // 在尾部添加元素
    System.out.println(fruits); // 输出:[pear, apple, banana, cherry, grape]
    
    String first = fruits.removeFirst(); // 移除并返回第一个元素
    System.out.println(first); // 输出:pear
    System.out.println(fruits); // 输出:[apple, banana, cherry, grape]
1.3 Vector
  • 创建语法

    java复制

    List<String> vector = new Vector<>();

    或者初始化时添加元素:

    java复制

    List<String> vector = new Vector<>(Arrays.asList("apple", "banana", "cherry"));
  • 应用场景

    • 线程安全Vector 是线程安全的,适用于多线程环境,但性能比 ArrayList 低。

    • 较少的并发操作:如果需要线程安全的集合,但并发操作较少,可以使用 Vector

    示例代码

    java复制

    List<String> fruits = new Vector<>();
    fruits.add("apple");
    fruits.add("banana");
    fruits.add("cherry");
    
    System.out.println(fruits.get(1)); // 输出:banana
    fruits.set(1, "orange"); // 替换索引为1的元素
    System.out.println(fruits); // 输出:[apple, orange, cherry]
1.4 Stack
  • 创建语法

    java复制

    Stack<String> stack = new Stack<>();
  • 应用场景

    • 后进先出(LIFO)操作Stack 是一个后进先出的集合,适用于需要栈操作的场景,如括号匹配、表达式求值等。

    示例代码

    java复制

    Stack<String> stack = new Stack<>();
    stack.push("apple");
    stack.push("banana");
    stack.push("cherry");
    
    System.out.println(stack.pop()); // 输出:cherry
    System.out.println(stack.peek()); // 输出:banana
    System.out.println(stack); // 输出:[apple, banana]

2. Set 集合

Set 是一个不允许重复元素的集合,没有索引,元素的顺序不确定(除了 LinkedHashSet)。

2.1 HashSet
  • 创建语法

    java复制

    Set<String> hashSet = new HashSet<>();

    或者初始化时添加元素:

    java复制

    Set<String> hashSet = new HashSet<>(Arrays.asList("apple", "banana", "cherry"));
  • 应用场景

    • 快速查找HashSet 基于哈希表实现,查找、添加和删除操作的时间复杂度为 O(1)。

    • 去重:适用于需要存储唯一元素的场景。

    示例代码

    java复制

    Set<String> fruits = new HashSet<>();
    fruits.add("apple");
    fruits.add("banana");
    fruits.add("cherry");
    fruits.add("apple"); // 重复元素不会被添加
    
    System.out.println(fruits); // 输出:[banana, cherry, apple](顺序不确定)
    System.out.println(fruits.contains("banana")); // 输出:true
2.2 LinkedHashSet
  • 创建语法

    java复制

    Set<String> linkedHashSet = new LinkedHashSet<>();

    或者初始化时添加元素:

    java复制

    Set<String> linkedHashSet = new LinkedHashSet<>(Arrays.asList("apple", "banana", "cherry"));
  • 应用场景

    • 保持插入顺序LinkedHashSet 保留了元素的插入顺序,适用于需要去重且保持顺序的场景。

    • 快速查找:和 HashSet 一样,查找、添加和删除操作的时间复杂度为 O(1)。

    示例代码

    java复制

    Set<String> fruits = new LinkedHashSet<>();
    fruits.add("apple");
    fruits.add("banana");
    fruits.add("cherry");
    fruits.add("apple"); // 重复元素不会被添加
    
    System.out.println(fruits); // 输出:[apple, banana, cherry](保持插入顺序)
    System.out.println(fruits.contains("banana")); // 输出:true
2.3 TreeSet
  • 创建语法

    java复制

    Set<String> treeSet = new TreeSet<>();

    或者初始化时添加元素:

    java复制

    Set<String> treeSet = new TreeSet<>(Arrays.asList("apple", "banana", "cherry"));
  • 应用场景

    • 有序存储TreeSet 基于红黑树实现,元素会自动按照自然顺序(或自定义比较器)排序。

    • 范围查询:适用于需要有序存储和范围查询的场景。

    示例代码

    java复制

    Set<String> fruits = new TreeSet<>();
    fruits.add("apple");
    fruits.add("banana");
    fruits.add("cherry");
    
    System.out.println(fruits); // 输出:[apple, banana, cherry](按字典序排序)
    System.out.println(fruits.first()); // 输出:apple
    System.out.println(fruits.last()); // 输出:cherry

3. Map 集合

Map 是一个键值对的集合,键是唯一的,但值可以重复。

3.1 HashMap
  • 创建语法

    java复制

    Map<String, Integer> hashMap = new HashMap<>();

    或者初始化时添加键值对:

    java复制

    Map<String, Integer> hashMap = new HashMap<>();
    hashMap.put("apple", 1);
    hashMap.put("banana", 2);
    hashMap.put("cherry", 3);
  • 应用场景

    • 快速查找HashMap 基于哈希表实现,查找、添加和删除操作的时间复杂度为 O(1)。

    • 键值对存储:适用于需要存储键值对的场景。

    示例代码

    java复制

    Map<String, Integer> fruits = new HashMap<>();
    fruits.put("apple", 1);
    fruits.put("banana", 2);
    fruits.put("cherry", 3);
    
    System.out.println(fruits.get("banana")); // 输出:2
    fruits.remove("banana"); // 移除键为"banana"的键值对
    System.out.println(fruits); // 输出:{apple=1, cherry=3}
3.2 LinkedHashMap
  • 创建语法

    java复制

    Map<String, Integer> linkedHashMap = new LinkedHashMap<>();

    或者初始化时添加键值对:

    java复制

    Map<String, Integer>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值