Java Map集合的介绍和使用

news2024/10/5 19:21:02

什么是Map类型的集合

介绍

1.用于保存具有映射关系的数据(key——value)。

2.Map中的key和value可以是任意的类型的数据。

3.Map中的key值不允许重复。

4.Map中的value值可以重复。

5.一般常用string作为value的key。

6.key和value之间存在一一对应的关系。

7.hashmap没有实现线程同步,因此线程是不安全的。

8.底层是由数组+链表+红黑树实现。

 常用的方法

1.put()添加元素

2.remove()删除元素

3.get()根据键值获取值。

4.size()获取map中的元素个数。

5.isEmpty()map集合是否为空。

6.clear()清除map集合。

7.containKey()查看key是否存在。

如下例子

import java.util.*;

public class Main {
    public static void main(String[] args) {
//        创建一个hashmap
        HashMap<Object, Object> map = new HashMap<>();

//        放入元素。
        map.put("note1",4);
        map.put(1,"puting element");
        map.put(23.44,"dog");

        System.out.println(map);
//        删除key值为1的数据。
        map.remove(1);
        System.out.println(map);


//        获取key值为note1的值。
        System.out.println(map.get("note1"));

//        获取map集合的元素个数
        System.out.println(map.size());

//        判断集合是否为空
        System.out.println(map.isEmpty());

//        key值是否存在
        System.out.println(map.containsKey("note1"));

//        value值是否存在
        System.out.println(map.containsValue("dog"));

//        清空map集合
        map.clear();

        System.out.println(map);

    }
}

遍历map集合

遍历方式1:通过key来得到值。

import java.util.*;

public class Main {
    public static void main(String[] args) {
//        创建一个hashmap
        HashMap<Object, Object> map = new HashMap<>();

//        放入元素。
        map.put("note1",4);
        map.put(1,"puting element");
        map.put(23.44,"dog");

//        得到所有的key
        Set keyset = map.keySet();

//        遍历key对应的值,并且将值取出来。
        for(Object obj : keyset)
        {
            System.out.println(obj+":"+map.get(obj));
        }

    }
}

通过得到迭代器的方式输出。

import java.util.*;

public class Main {
    public static void main(String[] args) {
//        创建一个hashmap
        HashMap<Object, Object> map = new HashMap<>();

//        放入元素。
        map.put("note1",4);
        map.put(1,"puting element");
        map.put(23.44,"dog");

//        得到map集合中的keyset
        Set keyset = map.keySet();

//    得到keyset的迭代器
        Iterator it = keyset.iterator();
//        it是否还有下一个元素
        while (it.hasNext())
        {
//            得到这个key值
            Object obj = it.next();
//            输出这个key和这个key对应的值;
            System.out.println(obj+":"+map.get(obj));

        }



    }
}

例子2:直接得到collection并且遍历输出。

import java.util.*;

public class Main {
    public static void main(String[] args) {
//        创建一个hashmap
        HashMap<Object, Object> map = new HashMap<>();

//        放入元素。
        map.put("note1",4);
        map.put(1,"puting element");
        map.put(23.44,"dog");
//        直接得到map中的values

        Collection collection = map.values();

//        直接遍历输出
        for (Object obj : collection)
        {
            System.out.println(obj);
        }
    }
}

通过得到迭代器的方式遍历collection

import java.util.*;

public class Main {
    public static void main(String[] args) {
//        创建一个hashmap
        HashMap<Object, Object> map = new HashMap<>();

//        放入元素。
        map.put("note1",4);
        map.put(1,"puting element");
        map.put(23.44,"dog");
//        直接得到map中的values

        Collection collection = map.values();

//        得到collection的迭代器
        Iterator iterator = collection.iterator();
//判断是否达到迭代器的末尾
        while (iterator.hasNext())
        {
//            输出并且指向下一个位置。
            System.out.println(iterator.next());
        }
    }
}

例子3:得到entrySet来遍历map

import java.util.*;

public class Main {
    public static void main(String[] args) {
//        创建一个hashmap
        HashMap<Object, Object> map = new HashMap<>();

//        放入元素。
        map.put("note1", 4);
        map.put(1, "puting element");
        map.put(23.44, "dog");



//        直接得到map中的entrySet
        Set entrySet = map.entrySet();
//      遍历输出。
        for (Object obj : entrySet)
        {
            System.out.println(obj);
        }


    }
}

迭代器方式

import java.util.*;

public class Main {
    public static void main(String[] args) {
//        创建一个hashmap
        HashMap<Object, Object> map = new HashMap<>();

//        放入元素。
        map.put("note1", 4);
        map.put(1, "puting element");
        map.put(23.44, "dog");



//        直接得到map中的entrySet
        Set entrySet = map.entrySet();

//        得到迭代器
        Iterator it = entrySet.iterator();
//      判断是否有下一个
        while (it.hasNext())
        {
//            有就输出
            System.out.println(it.next());
        }
//        没有就结束


    }
}

这里有个例子

import java.lang.reflect.MalformedParameterizedTypeException;
import java.net.CookieHandler;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

public class Main {
    public static void main(String[] args) {
//      得到map集合
        Map map = new HashMap();
//      put元素
        map.put(1,new Employee("Phonex",44444,1));
        map.put(2,new Employee("Schante",23342,2));
        map.put(3,new Employee("Eelemta",233,3));

//        遍历输出
//          得到value collection
          Collection collection= map.values();
//          遍历输出。
          for(Object obj:collection)
          {
              Employee employee = (Employee) obj;
              System.out.println(employee);
          }

          
//          这里输出工资打印5000的员工
//          得到map   entrySet
        collection = map.entrySet();
//  collection的迭代器
          Iterator iterator = collection.iterator();
//          遍历迭代器
          while (iterator.hasNext())
          {
//              得到迭代器中的entry
              Map.Entry entry = (Map.Entry) iterator.next();
//              得到entry中的值。
              Employee employee = (Employee) entry.getValue();
//              如果employee的工资大于5000
              if(employee.getSalary()>5000)
              {
//                  输出
                  System.out.println(employee);
              }
          }
    }
}

class Employee{
    private String name;
    private double salary;
    private int id;

    public Employee(String name, double salary, int id) {
        this.name = name;
        this.salary = salary;
        this.id = id;
    }

    public double getSalary() {
        return salary;
    }

    @Override
    public String toString() {
        return this.id+"\t"+this.name+"\t"+this.salary;
    }
}

HashTable 介绍和使用

介绍

1.hashtable和hashmap一样存放键和值(key-values).

2.不能存放相同键值的值。

3.使用方法和hashmap非常的相似。

4.hashtable是线程安全的,但是效率不如hashmap。

5.底层是由数组+链表+红黑树实现。

基本使用

import java.lang.reflect.MalformedParameterizedTypeException;
import java.net.CookieHandler;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

public class Main {
    public static void main(String[] args) {
        Hashtable<Object, Object> hashtable = new Hashtable<>();

        hashtable.put(1,"1");
        hashtable.put(1,"2");
        hashtable.put("good","dog");
        hashtable.put("finally","i win this game");

        Set keySet = hashtable.keySet();

        for(Object obj:keySet)
        {
            System.out.println(obj);
            System.out.println("value::"+hashtable.get(obj));
        }


        System.out.println(hashtable);
    }
}

Properties介绍和使用

1.Properties 继承了hashtable 类并且实现了Map接口,同样也是使用(key ——value)的形式存放数据。

2.使用和hashtable相似。

3.Properites主要用于文件,比如(name.properties)主要从中加载数据到properties类中。

4.通常用作配置文件。

基本使用

import java.awt.print.Printable;
import java.lang.reflect.MalformedParameterizedTypeException;
import java.net.CookieHandler;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

public class Main {
    public static void main(String[] args) {
        Properties properties = new Properties();

        properties.put("name","chaco");
        properties.put("ip","192.168.4.22");
        properties.put("value",442223);

        System.out.println(properties);

        System.out.println(properties.get("value"));

        Set set = properties.keySet();

        for(Object obj : set)
        {
            System.out.println(obj+":"+properties.get(obj));
        }


    }
}

TreeMap的介绍和使用

1.和其他map不同的是可以排序。

2.底层由红黑树实现。

3.treemap和hashmap一样存放键和值(key-values).

4.存在线程不安全。

基本使用

import java.awt.print.Printable;
import java.lang.reflect.MalformedParameterizedTypeException;
import java.net.CookieHandler;
import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;

public class Main {
    public static void main(String[] args) {
//        得到treeMap
        TreeMap<Object, Object> treeMap = new TreeMap<>(
//                定义排序规则
                new Comparator<Object>() {
                    @Override
                    public int compare(Object o, Object t1) {
                        return  ((String)o).compareTo((String) t1);
                    }
                }
        );
//      插入元素
        treeMap.put("zombie","good apple");
        treeMap.put("value",2342);
        treeMap.put("salary",234.44);
//      输出集合
        System.out.println(treeMap);
//        输出键对应的值
        System.out.println(treeMap.get("salary"));

//        打印输出
        Collection collection  = treeMap.keySet();
//      得到迭代器
        Iterator iterator = collection.iterator();
//如果有下一个key
        while (iterator.hasNext())
        {
//            得到这个key的
            String key =(String) iterator.next();
//            输出这个key和key的值。
            System.out.println(key+":"+treeMap.get(key));
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/148644.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何进行地图SDK开发(二)——示例文档

概述 前面的文章文章我们写到了SDK的开发以及ak认证的实现&#xff0c;在本文我们继续讲讲地图SDK开发中的示例文档的实现。 技术点 vue3viteelement-plusmonaco-editor 实现后效果 实现 1. 工程初始化 1.1 搭建工程 搭建工程的过程请参照博文(使用vite搭建vue3项目&…

javaEE初阶 — 线程池

文章目录线程池1 什么是线程池2 标准库中的线程池2.1 什么是工厂模式2.2 如何使用标准库中的线程池完成任务2.3 ThreadPoolExecutor 构造方法的解释3 实现一个线程池线程池 1 什么是线程池 随着并发程度的提高&#xff0c;随着对性能要求标准的提高会发现&#xff0c;好像线程…

[cpp进阶]C++异常

文章目录C语言传统处理错误的方式C异常概念C异常使用异常的抛出和捕获异常的重新抛出异常安全异常规范自定义异常体系C标准库的异常体系异常的优缺点C语言传统处理错误的方式 传统的错误处理机制&#xff1a; 终止程序。assert断言直接终止程序。缺点&#xff1a;过于粗暴&am…

Fiddler抓取手机APP报文

Http协议代理工具有很多&#xff0c;比如Burp Suite、Charles、Jmeter、Fiddler等&#xff0c;它们都可以用来抓取APP报文&#xff0c;其中charles和Burp Suite是收费的&#xff0c;Jmeter主要用来做接口测试&#xff0c;而Fiddler提供了免费版&#xff0c;本文记录一下在Windo…

位运算做加法,桶排序找消失元素,名次与真假表示,杨氏矩阵,字符串左旋(外加两道智力题)

Tips 1. 2. 3. 大小端字节序存储这种顺序只有在放进去暂时存储的时候是这样的&#xff0c;但是一旦我里面的数据需要参与什么运算之类的&#xff0c;会“拿出来”先恢复到原先的位置再参与运算&#xff0c;因此&#xff0c;大小端字节序存储的什么顺序不影响移位运算等等…

【案例教程】CLUE模型构建方法、模型验证及土地利用变化情景预测实践技术

【前沿】&#xff1a;土地利用/土地覆盖数据是生态、环境和气象等领域众多模型的重要输入参数之一。基于遥感影像解译&#xff0c;可获取历史或当前任何一个区域的土地利用/土地覆盖数据&#xff0c;用于评估区域的生态环境变化、评价重大生态工程建设成效等。借助CLUE模型&…

声音产生感知简记

声音产生 人的发音器官包括:肺、气管、声带、喉、咽、鼻腔、口腔、唇。肺部产生的气流冲击声带,产生震动。 声带每开启和闭合一次的时间是基音周期(Pitch period,T),其到数为基音频率(F.=1/T,基频),范围在70-450Hz。基频越高,声音越尖细,如小孩的声音比大人尖,就是…

编译错误2

本文迁移自本人网易博客&#xff0c;写于2015年11月25日&#xff0c;编译错误2 - lysygyy的日志 - 网易博客 (163.com)1、error C2059:语法错误&#xff1a;“<L_TYPE_RAW>”error C2238:意外的标记位于“;”之前.错误代码定位于&#xff1a;BOOL TreeView_GetCheckState…

excel函数公式:常用高频公式应用总结 上篇

公式1&#xff1a;条件计数条件计数在Excel的应用中十分常见&#xff0c;例如统计人员名单中的女性人数&#xff0c;就是条件计数的典型代表。条件计数需要用到COUNTIF函数&#xff0c;函数结构为COUNTIF(统计区域,条件)&#xff0c;在本例第一个公式COUNTIF(B:B,G2)中&#xf…

《栈~~队列~~优先级队列》

目录 前言&#xff1a; 1.stack 1.stack的介绍 2.stack的使用&#xff1a; 3.stack的模拟实现 4.有关stack的oj笔试题 2.queue 1.队列的介绍 2.队列的使用 3.队列的模拟实现 4.有关队列的oj笔试题 3.priority_queue 1.优先级队列的介绍 2.优先级队列的使用 3.优先级队列的模拟实…

挥别2022,坦迎2023。

第一章&#xff1a;CSDN&#xff0c;我来啦&#xff01;第一节&#xff1a;初遇&#xff01;2022-08-13&#xff0c;我和CSDN相遇啦&#xff01;CSDN&#xff0c;你好呀&#xff01;2022年8月13日&#xff0c;是我与你相遇的日子。这是一个值得纪念的时刻。从此之后&#xff0c…

English Learning - L1-10 时态(下) 2023.1.5 周四

English Learning - L1-10 时态&#xff08;下&#xff09; 2023.1.5 周四8 时态8.3 完成时态核心思想&#xff1a;回首往事&#xff08;一&#xff09;现在完成时核心思想用法延续动作延续时间 “动作一直持续了。。。”延续动&#xff08;无延续时间&#xff09; “做过。。…

AtCoder Beginner Contest 284 A - E

题目地址&#xff1a;AtCoder Beginner Contest 284 - AtCoder 一个不知名大学生&#xff0c;江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2023.1.8 Last edited: 2023.1.8 目录 题目地址&#xff1a;AtCoder Beginner C…

基于FPGA的UDP 通信(一)

引言手头的FPGA开发板上有一个千兆网口&#xff0c;最近准备做一下以太网通信的内容。本文先介绍基本的理论知识。FPGA芯片型号&#xff1a;xc7a35tfgg484-2网口芯片&#xff08;PHY&#xff09;&#xff1a;RTL8211网络接口&#xff1a;RJ45简述以太网什么以太网&#xff1f;以…

k8s之实战小栗子

写在前面 本文一起看一个基于k8s的实战小栗子&#xff0c;在这篇文章 中我们基于docker搭建了一个WordPress网站。本文就通过k8s再来实现一遍。架构图如下&#xff1a; ![在这里插入图片描述](https://img-blog.csdnimg.cn/9c73ac0c183a429a8f4b1a2feb363527.png 从上图可以…

使用Origin计算数据的上升\下降时间

使用Origin计算上升/下降时间计算上升时间1导入数据&#xff0c;做图2、选择合适的数据范围3、选择上升时间和上升范围两个测量参数&#xff0c;获得结果4、更改区间&#xff0c;并导出数据计算下降时间1、将感兴趣区域移动到下降沿2、更改为测量下降沿参数获得结果上升时间小工…

【Kotlin】空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )

文章目录一、空合并操作符 ?:二、空合并操作符与 let 函数结合使用一、空合并操作符 ?: 空合并操作符 ?: 用法 : 表达式 A ?: 表达式 B如果 表达式 A 的值 不为 null , 则 整个表达式的值 就是 表达式 A 的值 ; 如果 表达式 A 的值 为 null , 则 整个表达式的值 就是 表达…

vue-路由的使用方式

1.下载路由 使用npm的下载: # vue2对应版本 npm i vue-router3# vue3对应版本 npm i vue-router42.路由初试化 路由的三种模式: history, 指定路由的模式, 有hash,history,memory三种模式,一般使用第一种和第三种模式 createWebHashHistory hash模式 > http://localhost…

十大字符串函数与内存操作函数

前言&#xff1a;我们知道在C语言的库中有许许多多的库函数&#xff0c;今天我就来介绍一下自己对两大类库函数中一些常用函数的认识和理解&#xff0c;希望对大家有帮助。 说明&#xff1a;下文中会花较大篇幅实现这些库函数的模拟&#xff0c;请大家不要觉得库函数直接用就好…

UNet入门总结

作者&#xff1a;AI浩 来源&#xff1a;投稿 编辑&#xff1a;学姐 Unet已经是非常老的分割模型了&#xff0c;是2015年《U-Net: Convolutional Networks for Biomedical Image Segmentation》提出的模型。 论文连接&#xff1a;https://arxiv.org/abs/1505.04597 在Unet之前…