【JAVA】Map和Set的使用

目录

1.Map和Set在Java集合框架中的位置

2.Map接口

2.1关于Map

2.2关于Map.Entry,v>

2.3Map的常用方法说明

2.4 HashMap的使用案例

2.4.1添加

2.4.2查询

2.4.3遍历

 3.Set接口

3.1关于Set

3.2常见方法说明

3.3LinkedHashSet的使用案例

3.3.1添加

3.3.2判断是否包含某个元素


1.Map和Set在Java集合框架中的位置

Java 集合框架 Java Collection Framework ,又被称为容器 container ,是定义在 java.util 包下的一组接口 interfaces和其实现类 classes
类和接口总览图如下,Set继承自collection,Map没有继承自collection。

2.Map接口

2.1关于Map

Map 是一个接口类,该类没有继承自 Collection ,该类中存储的是 <K,V> 结构的键值对,并且 K 一定是唯一的,不能重复

2.2关于Map.Entry<K,V>

Map.Entry<K, V> 是 Map 内部实现的用来存放 <key, value> 键值对映射关系的内部类 ,该内部类中主要提供了<key, value> 的获取,value的设置以及Key的比较方式。
方法解释
K getKey()返回 entry 中的 key
V getValue() 返回 entry 中的 value
V setValue(V value)

将键值对中的value替换为指定value

2.3Map的常用方法说明

方法解释
V get (Object key)
返回 key 对应的 value
V getOrDefault (Object key, V defaultValue)
返回 key 对应的 value key 不存在,返回默认值
V put (K key, V value)
设置 key 对应的 value
V remove (Object key)
删除 key 对应的映射关系
boolean containsKey (Object key)
判断是否包含 key
boolean containsValue (Object value)
判断是否包含value
注意:
1. Map 是一个接口,不能直接实例化对象 ,如果 要实例化对象只能实例化其实现类 TreeMap 或者 HashMap
2. Map 中存放键值对的 Key 是唯一的, value 是可以重复的
3. TreeMap 中插入键值对时, key 不能为空,否则就会抛 NullPointerException 异常 value 可以为空。但是 HashMap key value 都可以为空。
4. Map 中的 Key 可以全部分离出来,存储到 Set 来进行访问 ( 因为 Key 不能重复 )
5. Map 中的 value 可以全部分离出来,存储在 Collection 的任何一个子集合中 (value 可能有重复 )
6. Map 中键值对的 Key 不能直接修改, value 可以修改,如果要修改 key ,只能先将该 key 删除掉,然后再来进行重新插入。

2.4 HashMap的使用案例

2.4.1添加

使用mao.put()添加元素。

public class MapUsage {
    public static void main(String[] args) {
        Map<String,String>map=new HashMap<>();
        //增加 put
        map.put("白柳","黑桃");
        map.put("谢怜","花城");
        map.put("江添","盛望");
        //添加顺序和保存顺序无关
        System.out.println("增添了三组<k,v>:");
        System.out.println(map);
        //put的两个用法:添加+更新,若k不存在,将新的键值对加入,若k存在,则更新对应v
        System.out.println("若k不存在,将新的键值对加入:");
        map.put("白六","红桃");
        System.out.println(map);
        map.put("白六","无");
        System.out.println("若k存在,则更新对应v:");
        System.out.println(map);
    }
}

2.4.2查询

使用map.get()和map.getOrDefault()进行查询。

        //查询
        //根据k返回v
        System.out.println("查询key=白柳时的value:");
        System.out.println(map.get("白柳"));
        //根据k查询v,若查不到,返回默认值
        System.out.println("根据k查询v,若查不到,返回默认值:");
        System.out.println(map.getOrDefault("小女巫","修女"));

2.4.3遍历

由于Map没有继承自Collection,所以需要将Map先转为Set,才能进行遍历。

使用entry.getKey()和entry.getValue()获取key集合,value集合。

        //遍历  先转为set类才能遍历
        Set<Map.Entry<String,String>>set=map.entrySet();
        for(Map.Entry<String,String>entry:set){
            System.out.println(entry.getKey()+"->"+entry.getValue());
        }

 3.Set接口

3.1关于Set

Set Map 主要的不同有两点: Set 是继承自 Collection 的接口类, Set 中只存储了 Key
Set是保存单个不重复元素的集合!

3.2常见方法说明

方法
解释
boolean add(E e)
添加元素,但重复元素不会被添加成功
boolean contains (Object o)
判断 o 是否在集合中
注意:
1. Set 是继承自 Collection 的一个接口类
2. Set 中只存储了 key ,并且要求 key 一定要唯一
3. TreeSet 的底层是使用 Map 来实现的,其使用 key Object 的一个默认对象作为键值对插入到 Map 中的
4. Set 最大的功能就是对集合中的元素进行去重
5. 实现 Set 接口的常用类有 TreeSet HashSet ,还有一个 LinkedHashSet LinkedHashSet 是在 HashSet 的基础
上维护了一个双向链表来记录元素的插入次序。
6. Set 中的 Key 不能修改,如果要修改,先将原来的删除掉,然后再重新插入
7. TreeSet 中不能插入 null key HashSet 可以。

3.3LinkedHashSet的使用案例

3.3.1添加

使用set.add()添加元素。(重复元素不会添加)

public static void main(String[] args) {
        Set<Integer>set=new HashSet<>();
        set.add(1);
        set.add(2);
        set.add(3);
        System.out.println(set.add(3));
        System.out.println(set);
}

 

3.3.2判断是否包含某个元素

使用map.contains()判断。

    public static void main(String[] args) {
        Set<Integer>set=new HashSet<>();
        set.add(1);
        set.add(2);
        set.add(3);
        System.out.println(set.add(3));
        System.out.println(set);
        System.out.println(set.contains(1));
        System.out.println(set.contains(5));
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值