HashSet与HashMap的区别?

一、概念和用途

  1. HashSet

    • HashSet是一种集合(Set)实现,用于存储不重复的元素。它基于哈希表数据结构,保证了元素的唯一性,但不保证元素的存储顺序。
    • 例如,用于存储一组不重复的用户名、存储唯一的订单编号等场景。当你不关心元素的顺序,只需要确保集合中不包含重复元素时,可以使用HashSet
  2. HashMap

    • HashMap是一种映射(Map)实现,用于存储键值对(key-value pairs)。它也基于哈希表数据结构,通过键(key)来快速查找对应的值(value)。
    • 例如,用于存储学生的学号和学生对象的对应关系、存储单词和其出现次数的对应关系等场景。当你需要根据一个特定的键来快速访问对应的值时,可以使用HashMap

二、存储结构

  1. HashSet

    • 只存储单个元素,每个元素在集合中是独立存在的,没有与其他元素形成明确的键值对关系。
    • 内部使用哈希表和链表(或红黑树,在 Java 8 及以上版本中,当链表长度超过一定阈值时会转换为红黑树)来存储元素,通过计算元素的哈希值来确定元素在哈希表中的存储位置。
  2. HashMap

    • 存储键值对,每个键值对由一个键和一个值组成。键和值可以是不同的数据类型,但键必须是唯一的。
    • 内部同样使用哈希表和链表(或红黑树)来存储键值对。通过计算键的哈希值来确定键值对在哈希表中的存储位置。

三、方法和操作

  1. HashSet的主要方法:

    • add():向集合中添加一个元素。如果集合中已经存在相同的元素,则添加操作失败,方法返回false
    • remove():从集合中移除一个元素。如果集合中不存在该元素,则移除操作失败,方法返回false
    • contains():判断集合中是否包含某个元素。如果集合中存在该元素,则方法返回true,否则返回false
  2. HashMap的主要方法:

    • put(key, value):向映射中添加一个键值对。如果映射中已经存在相同的键,则会覆盖原来的值。
    • remove(key):从映射中移除一个键值对。如果映射中不存在该键,则移除操作失败,方法返回null
    • get(key):根据键获取对应的值。如果映射中不存在该键,则方法返回null

四、遍历方式

  1. HashSet
    • 可以使用迭代器(Iterator)进行遍历,也可以使用增强型 for 循环。例如:
   HashSet<String> set = new HashSet<>();
   set.add("apple");
   set.add("banana");
   set.add("cherry");

   // 使用迭代器遍历
   Iterator<String> iterator = set.iterator();
   while (iterator.hasNext()) {
       System.out.println(iterator.next());
   }

   // 使用增强型 for 循环遍历
   for (String element : set) {
       System.out.println(element);
   }

  1. HashMap
    • 可以遍历键集(keySet)、值集(values)或者键值对集(entrySet)。例如:

   HashMap<String, Integer> map = new HashMap<>();
   map.put("apple", 5);
   map.put("banana", 3);
   map.put("cherry", 7);

   // 遍历键集
   for (String key : map.keySet()) {
       System.out.println(key + ": " + map.get(key));
   }

   // 遍历值集
   for (Integer value : map.values()) {
       System.out.println(value);
   }

   // 遍历键值对集
   for (Map.Entry<String, Integer> entry : map.entrySet()) {
       System.out.println(entry.getKey() + ": " + entry.getValue());
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值