Java 中 ArrayList 和 HashSet 的区别

简介: 【8月更文挑战第23天】

简介

ArrayList 和 HashSet 是 Java 中常用的集合框架类。它们都用于存储元素,但它们在存储方式、性能和使用场景上存在一些关键差异。

ArrayList

ArrayList 是一个基于数组实现的、可变大小的列表。它允许对元素进行快速、随机的访问,并且可以存储重复的元素。

HashSet

HashSet 是一个基于哈希表的集合。它存储唯一元素的集合,并且不允许重复。HashSet 的主要优点是快速查找元素,因为它使用哈希函数将元素映射到存储桶中。

比较

特性 ArrayList HashSet
数据结构 基于数组 基于哈希表
存储顺序 保持插入顺序 不保持插入顺序
允许重复 允许 不允许
查找元素 索引访问(快速) 哈希查找(非常快)
插入元素 附加到末尾(快速) 哈希插入(非常快)
删除元素 按索引删除(中等速度) 哈希删除(非常快)
迭代元素 使用 for 循环(中等速度) 使用迭代器(中等速度)
线程安全性 不是线程安全的 不是线程安全的
同步版本 ArrayList HashSet

何时使用 ArrayList

  • 当需要存储元素的顺序列表时。
  • 当需要快速随机访问元素时。
  • 当允许重复元素时。

何时使用 HashSet

  • 当需要快速查找元素时。
  • 当需要存储唯一元素的集合时。
  • 当需要检测元素是否存在时。

示例

以下是 ArrayList 和 HashSet 的示例代码:

ArrayList:

ArrayList<String> names = new ArrayList<>();
names.add("John");
names.add("Mary");
names.add("Bob");

for (String name : names) {
   
    System.out.println(name); // 输出:John、Mary、Bob
}

HashSet:

HashSet<String> uniqueNames = new HashSet<>();
uniqueNames.add("John");
uniqueNames.add("Mary");
uniqueNames.add("Bob");

for (String name : uniqueNames) {
   
    System.out.println(name); // 输出:John、Mary、Bob(顺序可能不同)
}

总结

ArrayList 和 HashSet 是 Java 中用于存储元素的两个重要的集合类。ArrayList 适用于需要快速随机访问和允许重复元素的情况。HashSet 适用于需要快速查找元素和存储唯一元素集合的情况。根据特定的需求和使用场景,可以选择最合适的数据结构。

目录
相关文章
|
22天前
|
存储 算法 Java
Arraylist 在 Java 中能容纳多少个元素?
【8月更文挑战第23天】
45 0
|
22天前
|
Java
|
16天前
|
XML JSON 前端开发
Java @RequestParam和@RequestBody的区别是什么?
【8月更文挑战第28天】Java @RequestParam和@RequestBody的区别是什么?
27 5
|
17天前
|
存储 Java
Java中ArrayList 元素的排序
本文提供了Java中根据`ArrayList`元素的某个属性进行排序的示例代码,包括实现`Comparable`接口和重载`compareTo`方法,然后使用`Collections.sort`方法进行排序。
|
21天前
|
Java 程序员
详解Java中的抽象类与接口的区别
【8月更文挑战第24天】
21 0
|
22天前
|
Java
如何在 Java 中使 Arraylist 匿名?
【8月更文挑战第23天】
29 0
|
22天前
|
存储 Java 编译器
|
22天前
|
存储 Java API
|
11天前
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
73 6
【Java学习】多线程&JUC万字超详解