首页 > 编程语言 >Java拾贝第十五天——集合之Map

Java拾贝第十五天——集合之Map

时间:2023-11-03 20:57:00浏览次数:33  
标签:Map Set Java 拾贝 iterator map value put 第十五天

image

从上图中可以发现,Map接口与Collection接口是不同的。

Map接口中的每个元素都使用"键值对"的形式存储在集合中。(key→value)

其接口定义如下:

public interface Map<K,V>

K泛型代表的是key,V泛型代表的是value。在使用Map时必须指定两个具体的类型。

Map常见的实现子类:HashMap,TreeMap

HashMap

HashMap是Map的子类,其类定义如下:

public class HashMap<K,V> extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable

HashMap与HashSet相同,其内部结构也是散列表。是一种无序的集合。

Map接口的常用方法如下:

方法 类型 描述
void clear() 普通方法 清空集合
V put(K key, V value) 普通方法 添加元素
V get(Object key) 普通方法 根据Key获取value
V remove(Object key) 普通方法 根据Key删除value
boolean containsKey(Object key) 普通方法 判断是否存在某Key
boolean containsValue(Object value) 普通方法 判断是否存在某value
Set<K> keySet() 普通方法 所有Key返回成一个Set集合
Collection<V> values() 普通方法 所有value返回成一个Collection集合

还有一个特殊的方法,

Set<   Map.Entry<K, V>   > entrySet()  普通方法  将一个Map对象转为Set集合
该方法会在文章最后一部分进行详解

V put(K key, V value) 和 V get(Object key)

添加元素 和 获取元素

栗子:

    public static void main(String[] args) {
        Map<String,Integer> map =new HashMap<>();
        map.put("张三",18);
        map.put("张三",19);//重复添加会覆盖上一次的value
        map.put("盖伦",22);
        map.put("灵狐者",26);

        System.out.println(map.get("张三"));
    }

程序运行结果:

19

V remove(Object key)

删除元素
栗子:

    public static void main(String[] args) {
        Map<String,Integer> map =new HashMap<>();
        map.put("张三",18);
        map.put("盖伦",22);
        map.put("易大师",23);

        System.out.println(map.get("盖伦"));

        map.remove("盖伦");
        map.remove("易大师",23);//remove(Object key, Object value) 重载
        System.out.println(map.get("盖伦"));
        System.out.println(map.get("易大师"));
    }

程序运行结果:

22
null
null

boolean containsKey(Object key) 和 boolean containsValue(Object value)

判断key是否存在 和 判断value是否存在
栗子:

    public static void main(String[] args) {
        Map<String,Integer> map =new HashMap<>();
        map.put("张三",18);
        map.put("盖伦",22);
        map.put("易大师",23);

        System.out.println(map.containsValue(22));
        System.out.println(map.containsValue(56));

        System.out.println(map.containsKey("易大师"));
        System.out.println(map.containsKey("沙砾"));
    }

程序运行结果:

true
false
true
false

Set<K> keySet()

把所有Key返回成一个Set集合

栗子:

    public static void main(String[] args) {
        Map<Integer,String> map =new HashMap<>();
        map.put(18,"藕片");
        map.put(29,"竹笋");
        map.put(31,"辣条");
        map.put(27,"锅盖");

        Set<Integer> set = map.keySet();//返回一个Set集合,Set的泛型要与Map中的Key泛型相同
        Iterator<Integer> iterator = set.iterator();//获取到Set直接使用迭代器
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

程序运行结果:

18
27
29
31

Collection<V> values()

把所有value返回成一个Collection集合

栗子:

    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(18, "藕片");
        map.put(29, "竹笋");
        map.put(31, "辣条");
        map.put(27, "锅盖");

        Collection<String> values = map.values();
        Iterator<String> iterator = values.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

程序运行结果:

藕片
锅盖
竹笋
辣条

Set< Map.Entry<K, V> > entrySet()

Set<   Map.Entry<K, V>   > entrySet()

该方法是返回一个Set集合,在Set集合中 他的泛型被指定为Map.Entry

Entry是定义在Map接口中的内部接口,其定义如下:

interface Entry<K,V>

从之前的内容可以知道,在Map集合操作中,所有元素都是通过 "键值对" 的形式保存的。

那么对于Map集合来说,实际上是将 "键值对" 的数据保存在了Map.Entry接口的实例中,

然后再把Map.Entry的实例对象插入到Map集合中,如图:
image

栗子:

    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(18, "藕片");
        map.put(29, "竹笋");
        map.put(31, "辣条");
        map.put(27, "锅盖");

        Set<Map.Entry<Integer, String>> set = map.entrySet();

        Iterator<Map.Entry<Integer, String>> iterator = set.iterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

程序运行结果:

18=藕片
27=锅盖
29=竹笋
31=辣条

TreeMap

TreeMap是Map的子类。TreeMap主要特点是key有序,如果是自定义的类必须要实现Comparable接口并重写compareTo()方法。(比较器)

栗子:

    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<>();
        map.put("D", "藕片");
        map.put("A", "竹笋");
        map.put("C", "辣条");
        map.put("Z", "锅盖");//无序添加 结果有序

        Set<String> set = map.keySet();
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

程序运行结果:

A
C
D
Z

不关是HashMap还是TreeMap,只要使用自定义的类作为Key,必须重写equals() 和 hashCode()

标签:Map,Set,Java,拾贝,iterator,map,value,put,第十五天
From: https://www.cnblogs.com/Ocraft/p/17808486.html

相关文章

  • JavaScript 其他循环语句和跳转语句
    一、while语句While循环会在指定条件为真时循环执行代码块。While循环,先进行条件判断,再执行循环体的代码while(条件表达式){循环体}如果条件不满足,则不会执行循环体,一次都不会案例:vari=1;while(i<=10){console.log(i);i++;}二、do.....while循环do/while......
  • 使用Docker部署java项目时遇到的几个错误
    0.简介本文主要是在学习黑马程序员Docker快速入门到项目部署过程中,对遇到的问题进行了相关的总结梳理1.本地已存在mysql服务占用3306端口问题当我使用dockerrun-d--namemysql-p3306:3306-eTZ=Asia/Shanghai-eMYSQL_ROOT_PASSWORD=123mysql准备创建mysql容器时报......
  • 如何获取URL参数使用jQuery或纯JavaScript?
    内容来自DOChttps://q.houxu6.top/?s=如何获取URL参数使用jQuery或纯JavaScript?我看过很多jQuery示例,其中参数的大小和名称是未知的。我的URL只会有一个字符串:http://example.com?sent=yes我只想检测:sent是否存在?它是否等于"yes"?最佳解决方案这里。vargetUrlPar......
  • Java八股面试整理(3)
    21.说一说hashCode()和equals()的关系hashCode()用于获取哈希码(散列码),eauqls()用于比较两个对象是否相等,它们应遵守如下规定:如果两个对象相等,则它们必须有相同的哈希码。如果两个对象有相同的哈希码,则它们未必相等。22.为什么要重写hashCode()和equals()?Object类提供的equ......
  • java判断按键是否按下
    Java判断按键是否按下的实现1.简介在Java中,可以使用java.awt.event.KeyEvent类来判断按键是否按下。本文将为刚入行的小白介绍如何实现Java判断按键是否按下的方法。2.实现步骤以下是实现Java判断按键是否按下的步骤:步骤 描述步骤1 创建一个KeyListener对象步骤2 实现KeyList......
  • java获得之前的时间, 时间的减法运算实现
    //方法一SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");StringmaxDateStr="2018-01-01";StringminDateStr="";Calendarcalc=Calendar.getInstance();try{......
  • Java中set详细用法
    在Java中,Set是一种集合类型,它用于存储不重复的元素。Set接口继承自Collection接口,它的实现类包括HashSet、LinkedHashSet和TreeSet。下面是Set的一些常用用法:1.创建Set对象:Set<String>set=newHashSet<>();//创建HashSet对象Set<Integer>set=newLinkedHashSet<>();//......
  • java语言实现医院绩效考核系统源码
    医院绩效考核系统通常是指对医院员工个体的工作绩效进行评估的工具,其目的是通过评估员工的工作表现和成果,为医院的薪酬、晋升、培训和发展等方面提供依据。绩效考核系统通常包括具体的考核指标、考核标准、考核周期等,通过量化的方式对员工的工作绩效进行评估。DRG点数绩效DRG点数......
  • 他皮任他皮,我学我的习-我的Java进阶之路!!
    他皮任他皮,我学我的习——架构师成长之路IT行业薪资高已成为大家的共识,但你知道哪个岗位薪资在IT行业中也是“高高在上”吗?先来看一项数据直观感受下!根据看准网调研的样本数据来看,架构师在全国的平均月薪为41609元,中位数为46083元,其中薪资范围在30k-38k的比例高达21%。(数据来源......
  • Aspose.Words for Java21.11去除水印和数量限制
    前言工欲善其事,必先利其器目前用到了word转pdf,然后开始研究大佬的文章,用于个人学习,首先感谢!源码分析1.下载Aspose.WordsforJava21.11官方jar包2.开始分析调用授权方法InputStreamis=newFileInputStream("..license.xml");Licenselicense=newLicense();license.setLi......