赞
踩
目录
以前我们常见的搜索方式有直接遍历,或者二分遍历,这些排序一般是对于静态数据进行的,一般是不会进行增删改的,而且如果数据很多的话就会变的特别慢,还有其他的要求,但是在现实生活中,不论是什么数据都是会动态变化的,那么这样的搜索方式显然是不太适合了,那么有什么更好的方式可以解决这个问题呢?今天的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:
- 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,后面会再介绍一下哈希表的底层是怎么构成的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。