(java 数据结构)Map接口和Set接口

Map和Set这两种java中集合框架接口学习

1.使用场景:需要搜索的场景

纯key模型:set背后的原理

                     判断集合中包含一个特定的元素,查找该元素是否已经在集合中了

key-value模型:Map背后的原理

                           key和value的一组映射关系

                           根据key查找对应的value

2.搜索背后的原理及数据结构

1)搜索树

2)哈希表

3)跳表

一.Map映射接口

Map<key,value>

它提供key到value的映射。Map中不能包含相同的key,每个key只能映射一个value,但是可以有多个相同的value。

Map接口提供三中集合的视图,Map的内容可以被当做一组key集合,一组value集合或者一组key-value映射。

常见的方法:

Map.Entry<K, V> 即 Map 中定义的 K 类型的 key 和 V 类型的 value 的映射关系的类。

方法 解释
K getKey() 返回 entry 中的 key
V getValue() 返回 entry 中的 value

常用方法:

import java.util.*;

public class MapDemo {
    public static void main(String[] args) {
        Map<Integer,String> map=new HashMap<>();
        //Map<key,value>
        //put<key,value>  设置 key 对应的 value,key重复,则不打印
        //他们打印的顺序与key值的顺序无关
        map.put(1,"hello");
        map.put(1,"Hello");
        map.put(2,"Java");
        map.put(3,"java");
        map.put(10,"C++");
        System.out.println(map);
        //返回key对应的value
        System.out.println(map.get(2));
        //查不到返回null
        System.out.println(map.get(50));
        //返回 key 对应的 value,key 不存在,返回默认值(defaulltValue)
        System.out.println(map.getOrDefault(2,"默认值"));
        System.out.println(map.getOrDefault(4,"默认值"));
        System.out.println(map);
        //打印所有的key
        for(Integer key:map.keySet()){
            System.out.println(key);
        }
        //打印所有的key
        for(String value:map.values()){
            System.out.println(value);
        }
        //删除key对应的映射关系
        map.remove(1);
        System.out.println(map);
        //按key-value映射关系打印
        for(Map.Entry<Integer,String> entry:map.entrySet()){
            System.out.println(entry);
        }
    }
}

运行截图:

二.Set接口

Set<key>   Set是一种不包含重复元素的Collection,继承了Collection接口,即任意的两个元素e1和e2比较,结果都不相等,set最多有一个null元素。

Set的常用方法:

import java.util.*;

public class SetMap {
    public static void main(String[] args) {
        Set<String> set=new HashSet<>();
        //添加,重复元素不打印
        set.add("Hello");
        set.add("Java");
        set.add("C++");
        set.add("Java");
        set.add("java");
        System.out.println(set);
        set.remove("C++");
        //remove(O)删除集合中的O
        System.out.println(set);
        //contains(O)判断O是否在集合中
        System.out.println(set.contains("Love"));
        //返回迭代器
        Iterator<String> it=set.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
        //清空集合
        set.clear();
        System.out.println(set);
    }
}

运行截图:

注意:在Map和Set中,打印出的结果顺序不一定是添加进去的顺序,顺序不唯一

发布了62 篇原创文章 · 获赞 9 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43669007/article/details/101152968