IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 一篇文章让你精通:java集合讲解(六,Map) -> 正文阅读

[数据结构与算法]一篇文章让你精通:java集合讲解(六,Map)

相信大家从头看过来,已经对前面List与Set有了一定的理解,下面我们就需要对集合中最后一个分类进行讲解Map,废话不多说,下面就让我们来看看Map有什么奇妙的地方吧!

目录

Map?

分类

HashMap:

LinkHashMap(HashMap的子类):

TreeMap:

使用Map

HashMap:

?结论:hashMap时(哈希表进行存储)

LinkedHashMap

?结论:LinkedHashMap时(哈希表进行存储)

TreeMap

?结论:TreeMapMap时(哈希表进行存储)

Map常见四种操作

练习map添加学生信息

问题:为什么没有重写hashcode与equals方法没有报错

问题:为什么是4个学生信息,我们添加的是五个学生信息?

Set与Map的关系(面试题)


Map?

? 特点:存储的是键值对的映射关系(每一个元素存在键与值,通过得到key找到与之对应value)

分类

?map分为二类,hashmap与treemap

HashMap:

特点:采用hashtable哈希表结构进行存储

优点:快

缺点:无序

LinkHashMap(HashMap的子类):

特点:采用hashtable哈希表结构进行存储,同时使用链表来维持次序

与Hashmap相比优点:有序(添加顺序)

TreeMap:

特点:采用二叉树(红黑树)结构进行存储

优点:比List的查找顺序要快

缺点:没有hashmap速度快

使用Map

Map的常见方法
put添加
size添加个数
get("key")通过key获取value
keySet()
获取key集合
values()
获取value
isEmpty()
判断是否为空
containsKey(“key”)
判断key是否存在
containsValue(“value”)
判断value是否存在,比较内容
replace(key,new 内容)

例:(

replace(12,new Student(10,"xiaoming",18,68.5))

修改key的内容
replace(“key”)
删除key

HashMap:

package com.luo_sf.map;


import java.util.HashMap;
import java.util.Map;
/*
使用map存储国家名称
*/
public class TestMap {
    public static void main(String[] args) {
        //创建Map
        Map<String,String> countries= new HashMap<>();

        //添加
        countries.put("中国","China");
        countries.put("美国","America");

        countries.put("巴西","Brazil");
        countries.put("韩国","Korea");
        //测试相同的key发生什么?
        countries.put("韩国","South Korea");

        //统计
        System.out.println(countries.size());
        //获取
        System.out.println(countries.get("中国"));
        //测试不存在的
        System.out.println(countries.get("日本"));

        //查看相同的key发生结果
        System.out.println(countries);

    }

}

?结论:hashMap时(哈希表进行存储)

1,key:无序,唯一(当我们存储相同的key时,后面value会覆盖前面value)

2,value: 无序 ,不唯一

LinkedHashMap

package com.luo_sf.map;



import java.util.LinkedHashMap;
import java.util.Map;
/*
使用map存储国家名称
*/
public class TestMap {
    public static void main(String[] args) {
        //创建Map
        Map<String,String> countries= new LinkedHashMap<>();

        //添加
        countries.put("中国","China");
        countries.put("美国","America");

        countries.put("巴西","Brazil");
        countries.put("韩国","Korea");
        //测试相同的key发生什么?
        countries.put("韩国","South Korea");

        //统计
        System.out.println(countries.size());
        //获取
        System.out.println(countries.get("中国"));
        //测试不存在的
        System.out.println(countries.get("日本"));

        //查看相同的key发生结果
        System.out.println(countries);

    }

}

?

?结论:LinkedHashMap时(哈希表进行存储)

1,key:有序(添加顺序),唯一(当我们存储相同的key时,后面value会覆盖前面value)

2,value: 无序 ,不唯一

TreeMap

package com.luo_sf.map;
import java.util.Map;
import java.util.TreeMap;

/*
使用map存储国家名称
*/
public class TestMap {
    public static void main(String[] args) {
        //创建Map
        Map<String,String> countries= new TreeMap<>();

        //添加
        countries.put("中国","China");
        countries.put("美国","America");

        countries.put("巴西","Brazil");
        countries.put("韩国","Korea");
        //测试相同的key发生什么?
        countries.put("韩国","South Korea");

        //统计
        System.out.println(countries.size());
        //获取
        System.out.println(countries.get("中国"));
        //测试不存在的
        System.out.println(countries.get("日本"));

        //查看相同的key发生结果
        System.out.println(countries);

    }

}

?

?结论:TreeMapMap时(哈希表进行存储)

1,key:有序(自然顺序,abc...),唯一(当我们存储相同的key时,后面value会覆盖前面value)

2,value: 无序 ,不唯一

Map常见四种操作

创建Map

 Map<String,String> Map名称= new TreeMap<>();

添加键值对

Map名称.put("key","value");

根据key获取value

System.out.println(Map名称.get("key"));

遍历数据

 //遍历Map
        System.out.println(countries);  //toString方法

        //获取key,得到value
        Set<String> keyset = countries.keySet();
        for (String key:keyset) {
            System.out.println(key + "-->" + countries.get(key));
        }

        //获取所以的节点(Entry,相当于哈希表与二叉树中的节点)组成集合
        System.out.println(countries.entrySet());
        //或者
        Set<Map.Entry<String,String>> entrySet=countries.entrySet();
        Iterator<Map.Entry<String,String>> it=entrySet.iterator();
        while (it.hasNext()){
        Map.Entry<String,String> entry=it.next();
            System.out.println(entry);
        }
    }

练习map添加学生信息

创建学生对象

package com.luo_sf.map;

public class Student {
    private int id;
    private String name;
    private int age;
    private Double scpre;

    public Student() {
    }

    public Student(int id, String name, int age, Double scpre) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.scpre = scpre;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public Double getScpre() {
        return scpre;
    }

    public void setId(int id) {
        this.id = id;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setScpre(Double scpre) {
        this.scpre = scpre;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", scpre=" + scpre +
                '}';
    }
}

创建map集合

package com.luo_sf.map;

import java.security.KeyStore;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.*;


public class StudentMap {
    public static void main(String[] args) {
        //创建一个map集合
        Map<Integer,Student> map= new HashMap();

        //创建学生信息
        Student stu1= new Student(10,"xiaoming",18,68.5);
        Student stu2= new Student(11,"zhangsan",28,78.5);
        Student stu3= new Student(12,"lishi",8,98.5);
        Student stu4= new Student(13,"wangwu",38,66.5);
        Student stu5= new Student(10,"xiaoming",18,68.5);

        //添加入map中
        map.put(stu1.getId(),stu1);
        map.put(stu2.getId(),stu2);
        map.put(stu3.getId(),stu3);
        map.put(stu4.getId(),stu4);
        map.put(stu5.getId(),stu5);

        //统计人数
        System.out.println(map.size());

        System.out.println(map);

        System.out.println(map.get(12));

        //遍历
        Set<Entry<Integer,Student>>entrySet = map.entrySet();
        for (Entry entry:entrySet) {

            System.out.println(entry.getValue());
        }

    }


}

?

问题:为什么没有重写hashcode与equals方法没有报错

?

 Map<Integer,Student> map= new HashMap();
 map.put(stu5.getId(),stu5);

因为哈希码与key有关跟value无关,我们设置的为Integer(学生的id),在哈希表内部有Integer的hashcode与equals方法,所以没有报错。

问题:为什么是4个学生信息,我们添加的是五个学生信息?

在map中key是唯一的,所以当出现重复的key时,后面value覆盖前面的value。

Set与Map的关系(面试题)

如果Map只存储key,不存储value时,就是与之对应的Set(SET是与之对应Map的key的集合)

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:39:06  更:2021-11-10 12:40:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:33:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码