Map和Set

目录

前言

一、什么是Map和Set

二、Map和Set的方法

总结


前言

以前我们常见的搜索方式有直接遍历,或者二分遍历,这些排序一般是对于静态数据进行的,一般是不会进行增删改的,而且如果数据很多的话就会变的特别慢,还有其他的要求,但是在现实生活中,不论是什么数据都是会动态变化的,那么这样的搜索方式显然是不太适合了,那么有什么更好的方式可以解决这个问题呢?今天的Map和Set就可以,让我们一起来看看吧!


一、什么是Map和Set

Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。 Map Set就 适合动态查找数据。

Map:

Map 是一个接口类,该类没有继承自 Collection,不能直接实例化对象 ,如果 要实例化对象只能实例化其实现类 TreeMap 或者 HashMap该类中存储的是<K,V> 结构的键值对,并且 K 一定是唯一的,不 能重复。且 Map 中键值对的 Key 不能直接修改, value 可以修改,如果要修改 key ,只能先将该 key 删除掉,然后再来进行 重新插入。

 

Set:

Set 是继承自 Collection 的一个接口类,Set中只存储了 key ,并且要求 key 一定要唯一 ,Set的底层是使用 Map 来实现的,其使用 key Object 的一个默认对象作为键值对插入到 Map 中的 ,Set最大的功能就是对集合中的元素进行去重, 实现 Set 接口的常用类有 TreeSet HashSet ,还有一个 LinkedHashSet LinkedHashSet 是在 HashSet 的基础上维护了一个双向链表来记录元素的插入次序,Set中的 Key 不能修改,如果要修改,先将原来的删除掉,然后再重新插入
TreeSet 中不能插入 null key,但HashSet可以

 

二、Map和Set的方法

Map:

public class Test {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();//最多使用hash
        map.put("hh",2);//放k,v
        map.put("stone",1);
        map.put("hello",3);//重复放不会计入
        map.put("hello",2);//重复放不会计入但是会更新其Value值
        map.put(null,null);//HashMap可以放null 但TreeMap不能放

        System.out.println(map.get("hh"));//通过Key得到Value值

        System.out.println(map.getOrDefault("stone", 58));
        System.out.println(map.getOrDefault("www", 88));//如果存在Key值就得出其Value值没有就赋值

        System.out.println(map.get("www"));//但是不会存入map中
        System.out.println(map);//存元素时  会被(通过一个函数(哈希函数))加工  不是按顺序排列的


        map.remove("hh");//删除
        System.out.println(map);

        Set<String> s = map.keySet();//得到所有不可重复的Key值
        System.out.println(s);

        System.out.println(map.values());//返回所有可重复的Value值

        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();//Map.Entry<String, String>是数据类型 会把Key和Value当做一个整体
        for (Map.Entry<String, Integer> entry:entrySet) {
            System.out.println("key:" + entry.getKey() + " "  + "value:" +  entry.getValue());
        }

        System.out.println(map.containsKey("hello"));//是否包含
    }
}

 

 Set:

public class Test {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<>();//里面所有元素不能重复
        set.add(1);
        set.add(3);
        set.add(2);
        set.add(2);//重复放入的不计入
        System.out.println(set);//也会排序
        //迭代器打印
        Iterator<Integer> iterator = set.iterator();
        while(iterator.hasNext()){
            System.out.print(iterator.next() + " ");
        }
        System.out.println();
        System.out.println(set.remove(2));//删除
        System.out.println(set.contains(2));//是否包含
        System.out.println(set.contains(3));

    }
}


总结

简单介绍一下Map和Set,这里最常使用的还是Hash,后面会再介绍一下哈希表的底层是怎么构成的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

栋zzzz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值