数据结构,Map和Set的使用

简介: 本文讲解:Java数据结构中的Map和Set的使用

1. Map的使用

通过上方Map和Set的模型我们知道了,Map中存储的是一个<Key,Value>的键值对结构。那么Map它是一个接口,底层有HashMap和TreeMap使用了这个接口。

image.gif编辑

因此,我们不能直接实例化(new)一个Map对象,SortedMap也是一个接口,也不能实例化。但可以实例化Map底层的HashMap和TreeMap。因此,我们使用Map来操作数据时,使用的就是HashMap和TreeMap了。

image.gif编辑


1.1Map的说明

在Map这个集合中,Map中Key值是唯一的,Value值可不唯一,借助以下代码来理解:

public static void main(String[] args) {
        Map<Character,Integer> map = new HashMap<>();
        map.put('A',3);//键值对A,3
        map.put('B',3);//键值对B,3
        map.put('A',6);//键值对A,6
        System.out.println(map);//输出map集合
}

image.gif

输出:

image.gif编辑通过输出结果我们发现到,第一行的键值对A,3没有输出。只输出了第二行键值对B,3和第三行的键值对A,6。因此我们可以确定Map集合中Key值唯一、Value值不唯一


1.2 Java中Map常用的方法

方法 返回类型及参数类型 说明
get() get(Object key) 返回key对用的value
getOrDefault() getOrDefault(Object key, V defaultValue) 返回key对应的value,key不存在时返回默认值
put() put(K key, V value) 设置key对应的value
remove() remove(Object key) 删除key对应的映射关系
keySet()  Set<K> keySet()  返回所有key的不重复集合
values()  Collection<V> values()  返回所有的value的可重复集合
entrySet()  Set<Map.Entry<K, V>> entrySet() 返回所有的key,value映射关系
containsKey(Object key)  boolean containsKey(Object key) 判断是否包含key
containsValue(Object value)  boolean containsValue(Object value) 判断是否包含value

以下为这些方法的实例演示:

public static void main(String[] args) {
        //实例化一个HashMap对象为map这个集合
        Map<Character,Integer> map = new HashMap<>();
        //put方法
        map.put('A',3);//put方法给map集合添加键值对A,3
        map.put('B',3);//put方法给map集合添加键值对B,3
        System.out.println("put两个键值对后map集合为: "+map);
        System.out.println("输出A对应的value值: "+map.get('A'));//get方法
        System.out.println("输出C对应的value值没有则输出默认值666: "+map.getOrDefault('C', 666));
        //remove方法
        map.remove('A');
        System.out.println("删除A后的map集合为: "+map);
        //keySet方法
        System.out.println("map集合中Key不重复值组成的集合: "+map.keySet());
        //entrySet方法
        System.out.println("map集合中的所有Key=Value映射(键值对)关系:"+map.entrySet());
        //containsKey方法
        System.out.println("判断map集合中是否包含Key为A的值: "+map.containsKey('A'));
        //containsValue方法
        System.out.println("判断map集合中是否包含Value为3的值: "+map.containsValue(3));
    }

image.gif

输出以下内容:

image.gif编辑


通过上方所有知识点的学习,我们能总结以下几点:

    1. Map是一个抽象类,不能被实例化,只能实例化底层的HashMap和TreeMap
    2. Map中存储的键值对Key是唯一的,Value是不唯一的
    3. Map中的Key可以全部分离出来,存储在Set中的任何一个子集合中(通过Set<K> keySet()方法)。因为Key不能重复!
    4. Map中的Value也可以全部分离出来,存储在Collection的任何一个子集合中(通过方法Collection<V> values()方法),因为Value可以重复!
    5. Map中的键值对Key值不能直接修改,Value可修改,如果要修改Key只能先删除Key值再重新插入。

    2. Set的使用

    Set与Map主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key。

    image.gif编辑


    2.1Java中Set的常用方法

    方法 返回类型及参数类型 说明
    add() boolean add(E e) 添加元素,但重复元素不会被添加成功
    clear() void clear() 清空集合
    contains() boolean contains(Object o)  判断 o 是否在集合中
    iterator() Iterator<E> iterator()  返回迭代器
    remove() boolean remove(Object o)  删除集合中的 o
    size() int size() 返回set中元素的个数
    isEmpty() boolean isEmpty() 检测set是否为空,空返回true否则返回false
    toArray() Object[] toArray() 将set中的元素转换为数组返回
    containsAll() boolean containsAll(Collection<?> c) 集合c中的元素是否在set中全部存在,是返回true否则返回false
    addAll() boolean addAll(Collection<? extends
    E> c)
    将集合c中的元素添加到set中,可以达到去重效果

    大家可以下来自行测试一番。

    相关文章
    |
    30天前
    |
    存储 Java
    告别混乱!用Java Map优雅管理你的数据结构
    【10月更文挑战第17天】在软件开发中,随着项目复杂度增加,数据结构的组织和管理至关重要。Java中的Map接口提供了一种优雅的解决方案,帮助我们高效、清晰地管理数据。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,有效提升了代码质量和维护性。
    82 2
    |
    30天前
    |
    存储 Java 开发者
    Java Map实战:用HashMap和TreeMap轻松解决复杂数据结构问题!
    【10月更文挑战第17天】本文深入探讨了Java中HashMap和TreeMap两种Map类型的特性和应用场景。HashMap基于哈希表实现,支持高效的数据操作且允许键值为null;TreeMap基于红黑树实现,支持自然排序或自定义排序,确保元素有序。文章通过具体示例展示了两者的实战应用,帮助开发者根据实际需求选择合适的数据结构,提高开发效率。
    61 2
    |
    28天前
    |
    存储 Java 开发者
    Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效
    【10月更文挑战第19天】在软件开发中,随着项目复杂度的增加,数据结构的组织和管理变得至关重要。Java中的Map接口提供了一种优雅的方式来管理数据结构,使代码更加清晰、高效。本文通过在线购物平台的案例,展示了Map在商品管理、用户管理和订单管理中的具体应用,帮助开发者告别混乱,提升代码质量。
    27 1
    |
    1月前
    |
    存储 JavaScript 前端开发
    Set、Map、WeakSet 和 WeakMap 的区别
    在 JavaScript 中,Set 和 Map 用于存储唯一值和键值对,支持多种操作方法,如添加、删除和检查元素。WeakSet 和 WeakMap 则存储弱引用的对象,有助于防止内存泄漏,适合特定场景使用。
    |
    2月前
    |
    存储 Java API
    【数据结构】map&set详解
    本文详细介绍了Java集合框架中的Set系列和Map系列集合。Set系列包括HashSet(哈希表实现,无序且元素唯一)、LinkedHashSet(保持插入顺序的HashSet)、TreeSet(红黑树实现,自动排序)。Map系列为双列集合,键值一一对应,键不可重复,值可重复。文章还介绍了HashMap、LinkedHashMap、TreeMap的具体实现与应用场景,并提供了面试题示例,如随机链表复制、宝石与石头、前K个高频单词等问题的解决方案。
    37 6
    【数据结构】map&set详解
    |
    1月前
    |
    存储 缓存 Java
    【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
    【用Java学习数据结构系列】HashMap与TreeMap的区别,以及Map与Set的关系
    36 1
    |
    1月前
    |
    存储 安全
    【数据结构】Set的使用与注意事项
    【数据结构】Set的使用与注意事项
    23 2
    |
    1月前
    |
    存储 自然语言处理 安全
    【数据结构】Map的使用与注意事项
    【数据结构】Map的使用与注意事项
    29 1
    |
    2月前
    |
    算法
    你对Collection中Set、List、Map理解?
    你对Collection中Set、List、Map理解?
    36 5
    |
    2月前
    |
    存储 JavaScript 前端开发
    js的map和set |21
    js的map和set |21

    热门文章

    最新文章

    下一篇
    无影云桌面