Java HashSet使用方法教程及示例代码

Java中,HashSet 是一个非常常用的集合类,属于 java.util 包。它实现了 Set 接口,表示一个不允许重复元素的集合。HashSet 基于哈希表实现,因此其元素存储是无序的,也就是说,它不能保证元素的插入顺序。本文主要介绍Java HashSet使用方法教程及示例代码,还有HashMap和HashSet的区别。

1、Java HashSet

HashSet实现了Set接口,它不允许集合中有重复的值,当将对象存储在HashSet之前,要先确保对象重写equals()hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存重复的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。

例如:

创建一个名为langs的HashSet对象,该对象将存储字符串:

import java.util.HashSet; // 导入HashSet

HashSet<String> langs = new HashSet<String>();

2、访问HashSet中的元素

HashSet类具有许多有用的方法。 例如,要向其中添加元素,请使用add()方法:

例如:

// 导入HashSet
import java.util.HashSet;

public class Main {
  public static void main(String[] args) {
    HashSet<String> langs = new HashSet<String>();
    langs.add("c");
    langs.add("java");
    langs.add("python");
    langs.add("cjavapy");
    langs.add("javascript");
    System.out.println(langs);
  }
}

注意:集合中的每个元素都必须是唯一的。

3、判断HashSet中的元素

要判断HashSet中是否存在某个元素,请使用contains()方法:

例如:

langs.contains("cjavapy");

4、删除HashSet中的元素

要删除元素,请使用remove()方法:

例如:

langs.remove("cjavapy");

要删除所有元素,请使用clear()方法:

例如:

langs.clear();

5、HashSet size

要找出有多少个元素,需要使用size方法:

例如:

langs.size();

6、循环遍历HashSet中的元素

通过for-each循环遍历HashSet的元素:

例如:

for (String i : langs) {
  System.out.println(i);
}

7、其它类型

HashSet中的项目实际上是对象。在上面的示例中,我们创建了 项目 (对象)类型为字符串。Java中的String是一个对象(不是原始类型)。要使用其他类型,例如int,必须指定等效的包装类:Integer。对于其他基本类型,请使用:Boolean表示布尔值,Character表示charDouble表示double,等等。

基本类型对应的包装类表如下:

基本类型

引用类型

boolean

Boolean

byte

Byte

short

Short

int

Integer

long

Long

float

Float

double

Double

char

Character

例如:

使用存储Integer对象的HashSet

import java.util.HashSet;

public class Main {
  public static void main(String[] args) {

    // 创建HashSet对象 
    HashSet<Integer> numbers = new HashSet<Integer>();

    // 添加
    numbers.add(4);
    numbers.add(5);
    numbers.add(8);

    // 判断指定值是否包含
    for(int i = 1; i <= 10; i++) {
      if(numbers.contains(i)) {
        System.out.println(i + " 存在numbers中");
      } else {
        System.out.println(i + " 存在numbers中");
      }
    }
  }
}

8、HashMap和HashSet的区别

HashMapHashSet 都是 Java 中常用的集合类,都是基于哈希表(HashTable)实现的,但它们有不同的使用场景和行为。

1)接口实现

HashMap实现了 Map 接口,是一个键值对集合,用于存储键值对(key-value)。每个元素都有一个唯一的键(key)和对应的值(value)。

HashSet实现了 Set 接口,用于存储不重复的元素(没有键和值,只有元素)。HashSet 的元素没有顺序。

2)数据存储

HashMap存储的是键值key-value),其中每个 key 唯一,value 可以是重复的。

HashSet存储的是单独的元素,没有键值对,元素必须是唯一的。

3)元素访问

HashMap通过 key 来访问对应的 value。可以通过 get(key) 方法获取值,或者通过 containsKey(key) 判断是否包含某个键。

HashSet只存储元素,只能判断某个元素是否存在,而不能像 HashMap 那样使用 key 来查找对应的值。

4)使用场景

HashMap用于存储键值对的映射关系,当你需要根据某个 key 查找或操作对应的 value 时,使用 HashMap。例如:缓存、字典、存储配置信息等。

HashSet用于存储一组不重复的元素,当你只关心元素是否存在,而不需要存储额外的值时,使用 HashSet。例如:去重、集合运算、元素存在性判断等。

5)线程安全

HashMap 不是线程安全的。如果多个线程并发访问并修改一个 HashMap,可能会导致数据不一致。可以使用 Collections.synchronizedMap 来使其线程安全,或者使用 ConcurrentHashMap

HashSet 本身也不是线程安全的。如果需要线程安全,可以使用 Collections.synchronizedSet 来使其线程安全,或者使用 CopyOnWriteArraySet

推荐阅读
cjavapy编程之路首页