Java HashMap和HashSet的区别与联系

不同点

HashMapHashSet
实现的接口Map、Cloneable、SerializableSet
存储对象的方式(适用情况)HashMap存储的内容是键值对(Key和Value)的映射,它保持了Key和Value之间的对应关系。HashSet基于HashMap实现的,是一个集合
是否允许元素重复不允许重复的Kry,但它允许重复的Value,即允许重复的值。不允许有重复的元素,即不能存重复的值。
是否允许null允许一个null的Key和任意数量的空Value。仅允许具有单个空值。

相似点

  1. HashMap和HashSet都是无序的,他们都不会记录插入的顺序;
  2. 两者都不支持线程同步(?);
  3. 他们都提供了基于时间的基本操作,例如添加、删除元素或值;

示例

HashMap
import java.util.HashMap;

public class MyHashMap {
    HashMap<Integer, String> myMap = new HashMap<>(); // 注意这里我已经规定为int和string
    HashMap<Integer, String> map2 = new HashMap<>();
    /*
    * put方法:key,value
    * 一般把key作为引索,value用来存东西
     */
    public void mapPut(){

        myMap.put(1,"你好");
        myMap.put(2,"怎么样");
        myMap.put(3,"还行吧");
        myMap.put(4,"就那样");
        System.out.println(myMap);
    }
    /*
    * get按照key的值来
     */
    public void mapGet(int num) {
        System.out.println(myMap.get(num));
    }
    /*
    * contains有返回TRUE
    *         无返回FALSE
     */
    public void mapContains(){
        System.out.print("containsKey 3:"+myMap.containsKey(3)+" | ");
        System.out.print("containsKey 6:"+myMap.containsKey(6)+" | ");
        System.out.println("containsValue 就那样:"+myMap.containsValue("就那样"));
    }
    /*
    * 返回所有的key
     */
    public void mapKey() {
        System.out.println(myMap.keySet());
    }
    /*
    * putAll会把所有的东西映射到被putall的map里
    * 但如果被putall的map里有独有的东西是不会被清除的
    * 详细参考:https://www.runoob.com/java/java-hashmap-putall.html
     */
    public void mapPutAll() {
        map2.put(7,"你没有");
        map2.putAll(myMap); // 将myMap映射到map2
        System.out.println(map2);
    }
    /*
    * 返回映射中所有 value 组成的 Set 视图
     */
    public void mapValue() {
        System.out.println(myMap.values());
    }

    public void mapRemove() {
        map2.remove(3);
        System.out.println(map2);
    }
}

输出结果:

map

HashSet
import java.util.HashSet;

public class MyHashSet {
    HashSet<String> set = new HashSet<>();
    //add方法只允许每个元素添加一次
    public void setAdd() {
        set.add("你好!");
        set.add("我是Aicy");
        set.add("你的个人助理");
        set.add("你好!"); // 测试重复项
        System.out.println(set);
    }
    public void setContains(Object o) {
        System.out.println("查找 你好!:" + set.contains(o));
        System.out.println("查找 233:" + set.contains(233));
    }
    // 迭代器
    public void out() {
        for (String i : set) {
            System.out.println(i);
        }
    }
}

输出结果:

set

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值