哈希表HashMap和哈希集HashSet的区别,操作复杂度o(1),哈希表的值传递和引用传递的区别

哈希表HashMap和哈希集HashSet的区别,操作复杂度o(1),哈希表的值传递和引用传递的区别

提示:哈希表是很重要的数据结构!


系统数据结构o(1)操作的哈希表和哈希集

哈希表HashMap:键值对,存放key,key挂value
有点像python中的字典
在这里插入图片描述
哈希集:HashSet
只有key没有value
在这里插入图片描述
但是他们都可以put(key,value),remove(key)
哈希表有:查找key是否存在的函数containsKey(x),没有的就返回null
哈希集有:查找key是否存在的函数contains(x)
他们俩的底层数据组织方式一模一样

另外呢,哈希表和哈希集,他们的key当然是独立的,不允许重复,可以达到去重的目的,
第二次放同样的key,那就是修改更新操作了【重复添加即修改值】

public static void testHashMap(){
        HashMap<Integer, String> map = new HashMap<>();//别忘了new
        map.put(1,"王远阳");
        map.put(2,"总巴狗");
        map.remove(2);
        System.out.println(map.containsKey(2));
        System.out.println(map.containsKey(1));
        map.put(1,"ssss");//重复添加即修改值
        System.out.println(map.get(1));
        System.out.println(map.get(10));//没有的就是null
    }
public static void testHashSet1(){
        HashSet<Integer> set = new HashSet<>();
        set.add(1);
        set.add(2);
        set.add(2);//重复添加即修改值
        set.add(3);
        set.add(4);
        set.remove(4);
        System.out.println(set.contains(2));
        System.out.println(set.contains(10));
    }

代码自己撸一下,看看啥情况

以上增删改查一律o(1)复杂度
当然,操作字符串的话,还不是o(1),是o(k),k是字符串长度。将来操作字符串还是要考虑一下实际的时间的


哈希表的值传递和引用传递(java)

(1)基础数据类型int,double,float,他们是值传递
所谓值传递,就是真的赋值!
(2)Integer,Float,Double等大写的数据类型,采用的是引用传递,传的是地址
注意:这种大写的数据类型,如果当数值范围在-128–127时仍然是值传递

//注意:此处Integer,Float,Double等大写的数据类型,采用的是引用传递,传的是地址
    //而int,float,double等等是基础数据类型,采用值传递,直接用值
    //在Hash中Integer啥的一律按照“值传递”的方式,记住这个知识点,
    // 而在Hash中,非基础类型是引用传递,比如Node
    public static void testIntegerAndint(){
        int a = 1;
        int b = 1;
        System.out.println(a == b);//这里是true
        Integer c = 1;
        Integer d = 1;
        System.out.println(c == d);//这里是true——当数值范围在-128--127时仍然是值传递
        //当数值范围超出了-128--127时,才是引用传递
        Integer e = 100000;
        Integer f = 100000;
        System.out.println(e == f);//这里是false,引用传递的地址不再一样了
    }

看结果:

true
true
false

哈希表中,基础数据类型,不管大写还是小写数据类型【都是基础数据类型】,一律按照值传递
而非基础数据类型【比如节点Node,自定义那些数据结构】,一律按照引用传递

区别在呢?
值传递,啥玩意都传了,容易占用太多内存,访问速度慢
但是引用传递,如果Node太大,比如20G,咱只需要引用传递它的地址,不过也就8字节,就不会占用那么多人空间了
懂了吧!就是为了节约空间,节省时间。!!!


总结

提示:重要经验:

1)哈希表,哈希集,是很重要的数据结构,今后很多数据结构与算法的题目,都要用哈希表来实现
2)了解java中数据结构类型的传递形式,哈希表的基础数据类型一律值传递,非基础数据类型一律引用传递

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰露可乐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值