Java集合 —— Map集合

Map集合的特点:
  1. 将键映射到值的对象、

  2. key和value可以是任意的引用类型的数据

  3. 一个映射不能包含重复的键(map集合的key值不能重复)

  4. 每个键最多可以映射到一个值(每个键值对只有一个key值,一个value值)

  5. 同样的值可以对应多个不同的键(不同的键值对可以拥有相同的value值)

Map集合的功能:

1、添加功能: put(K key,V value)将指定的值与该映射中的指定键相关联

2、删除功能:

remove(Object key)如果存在,从该map集合中删除一个键的映射

void clear()从该map集合中删除所有的映射

3、长度功能:int size()返回此地图中键值映射的数量

这里使用的具体实现类是HashMap类,其特点是
  1. key值不可重复

  2. 不保证插入顺序,但是打印结果,循环遍历时,输出顺序不会改

package review.MapDemo;

import java.util.HashMap;

import java.util.Map;

public class demo1 {

public static void main(String[] args) {

Map<String,String> map = new HashMap<>();

// put(K key,V value)将键值对放入map集合

map.put(“唐僧”,“袈裟”);

map.put(“八戒”,“九齿钉耙”);

map.put(“沙僧”,“行李”);

//两次插入同一个key的映射的时候,返回的是该key上一个映射中对应的值

System.out.println(map.put(“孙悟空”,“金箍棒”)); //null

System.out.println(map.put(“孙悟空”,“定海神珍”)); //金箍棒

System.out.println(map.toString()); //{沙僧=行李, 孙悟空=定海神珍, 唐僧=袈裟, 八戒=九齿钉耙}

// remove(Object key)根据key删除元素,会返回key对应的value值

String value1 = map.remove(“沙僧”);

System.out.println(value1); //行李

System.out.println(map.toString()); //{孙悟空=定海神珍, 唐僧=袈裟, 八戒=九齿钉耙}

// size() 返回map集合中映射的数量

System.out.println(map.size()); //3

// void clear()清空map集合

map.clear();

System.out.println(map.toString()); //{}

}

}

4、判断功能:

boolean containsKey(Object key)

boolean containsValue(Object value)

boolean isEmpty()

package review.MapDemo;

import java.util.HashMap;

import java.util.Map;

public class demo2 {

public static void main(String[] args) {

Map<String,String> map = new HashMap<>();

map.put(“唐僧”,“袈裟”);

map.put(“八戒”,“九齿钉耙”);

map.put(“沙僧”,“行李”);

//containsKey(Object key)判断集合中是否包含某个键

System.out.println(map.containsKey(“八戒”)); //true

System.out.println(map.containsKey(“孙悟空”)); //false

//containsValue(Object value)判断集合中是否包含某个值

System.out.println(map.containsValue(“袈裟”)); //true

System.out.println(map.containsValue(“女儿国国王”)); //false

//isEmpty()判断map集合是否为空

System.out.println(map.isEmpty()); //false

map.clear();

System.out.println(map.isEmpty()); //true

}

}

5、获取功能:

(一)get(Object key) 根据指定的key获取对应的value

(二)Set< K > keySet() 返回一个Set集合,包含map集合中全部的key值

(三)Collection< V > values() 返回一个Collection集合,包含map集合中全部的value值

(四)Set<Map.Entry<K,V>> entrySet() 返回一个Set集合,包含map集合中全部的映射关系

package review.MapDemo;

import java.util.Collection;

import java.util.HashMap;

import java.util.Map;

import java.util.Set;

public class demo3 {

public static void main(String[] args) {

Map<String,String> map = new HashMap<>();

map.put(“唐僧”,“袈裟”);

map.put(“八戒”,“九齿钉耙”);

map.put(“沙僧”,“行李”);

// get(Object key)根据指定的key获取对应的value

//如果key值不存在,则返回null

System.out.println(map.get(“唐僧”)); //袈裟

System.out.println(map.get(“女儿国国王”)); //null

//Set keySet()返回一个Set集合,包含map集合中全部的key值

Set keys = map.keySet();

for(String s : keys){

System.out.println(s);

}

//Collection values()返回一个Collection集合,包含map集合中全部的value值

Collection values = map.values();

for(String s : values){

System.out.println(s);

}

//Set<Map.Entry<K,V>> entrySet()返回一个Set集合,包含map集合中全部的映射关系

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

for(Map.Entry<String,String> s : entrySet){

String key = s.getKey();

String value = s.getValue();

System.out.println(key+“=”+value);

}

}

}

在这里插入图片描述

map集合的遍历
方式一、根据键找值,借助Set keySet()遍历

package review.MapDemo;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

public class demo4 {

public static void main(String[] args) {

Map<String,String> map = new HashMap<>();

map.put(“孙悟空”,“金箍棒”);

map.put(“唐僧”,“袈裟”);

map.put(“八戒”,“九齿钉耙”);

map.put(“沙僧”,“行李”);

/*

借助Set keySet()遍历

1、获取Map集合中所有映射的键的Set集合

2、遍历键的集合,根据每一个键获取对应的值

*/

//方式一,用增强for循环

Set keys = map.keySet();

for(String s : keys){

String key = s;

String value = map.get(s);

System.out.println(key+“=”+value);

}

//方式二,用迭代器

//为Set集合创建一个迭代器Iterator

Set itkeys = map.keySet();

Iterator it = itkeys.iterator();

while(it.hasNext()){

String key = it.next();

String value = map.get(key);

System.out.println(key+“=”+value);

}

}

}

在这里插入图片描述

方式二、根据键值对对象找键和值

package review.MapDemo;

import java.util.HashMap;

import java.util.Map;

import java.util.Iterator;

import java.util.Set;

public class demo5 {

public static void main(String[] args) {

Map<String,String> map = new HashMap<>();

map.put(“孙悟空”,“金箍棒”);

map.put(“唐僧”,“袈裟”);

map.put(“八戒”,“九齿钉耙”);

map.put(“沙僧”,“行李”);

/*

通过集合中每个键值对(Entry)对象,获取键值对(Entry)对象中的键与值。

1、获取所有的键值对的集合

2、遍历包含所有键值对的Set集合,得到每一个键值对对象

3、根据获取到的每一个键值对,来获取键和值

*/

//方式一、增强for循环

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

for(Map.Entry<String,String> s : entrySet){

String key = s.getKey();

String value = s.getValue();

System.out.println(key+“=”+value);

}

//方式二、迭代器遍历

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

Iterator<Map.Entry<String,String>> it = entrySet.iterator();

while(it.hasNext()){

Map.Entry<String,String> entry = it.next();

String key = entry.getKey();

String value = entry.getValue();

System.out.println(key+“=”+value);

}

}

}

结果同上面一样

当自定义类的对象传入map集合时,应该重写equals和hashcode方法

具体实现我在之前的博客写过了

集合List和Map——重写equals和hashCode方法(集合元素是类的对象)

这里举一个简单的例子

package review.MapDemo;

import java.util.Objects;

public class Student {

private String name;

private int age;

public Student() {

}

public Student(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return “Student{” +

“name='” + name + ‘’’ +

“, age=” + age +

‘}’;

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

Student student = (Student) o;

return age == student.age &&

Objects.equals(name, student.name);

}

@Override

public int hashCode() {

return Objects.hash(name, age);

}

}

package review.MapDemo;

import java.util.HashMap;

import java.util.Set;

public class demo6 {

public static void main(String[] args) {

HashMap<Student,Integer> map = new HashMap<>();

Student s1 = new Student(“zhang”,12);

Student s2 = new Student(“zhou”,14);

Student s3 = new Student(“zhang”,12);

map.put(s1,1);

map.put(s2,2);

map.put(s3,3);

Set keys = map.keySet();

for(Student s : keys){

String name = s.getName();

int age = s.getAge();

System.out.println(name+“—”+age);

}

}

}

在这里插入图片描述

LinkedHashMap

LinkedHashMap

  1. 实现了Map接口,底层是依赖于哈希表和链表的,具有可预知的遍历顺序

  2. 哈希表保证唯一性,保证的是Key的唯一性

  3. 链表保证有序,保证的是键的有序(存储和取出顺序一致)

package review.MapDemo;

import java.util.LinkedHashMap;

import java.util.Set;

public class LinkedHashMapDemp1 {

public static void main(String[] args) {

LinkedHashMap<String,String> map = new LinkedHashMap<>();

map.put(“1”,“java”);

map.put(“3”,“hive”);

map.put(“2”,“hadoop”);

Set keys = map.keySet();

for(String s : keys){

String key = s;

String value = map.get(s);

System.out.println(key+“=”+value);

}

}

}

在这里插入图片描述

TreeMap
  1. HashMap的key值是无序的,而实现了SortedMap接口的具体实现类TreeMap会对key值进行排序

  2. TreeMap底层基于红黑树

  3. TreeMap实现排序有两种方式

(一)传入的key值实现了Comparable接口(String,Integer等都已经实现了Comparable接口,因此可以直接用)

(二)创建TreeMap集合的时候指定比较器Comparator

在这里插入图片描述

例1 key值为String类型时

import java.util.Map;

import java.util.Set;

import java.util.TreeMap;

public class demo1 {

public static void main(String[] args) {

TreeMap<String,Integer> treeMap = new TreeMap<>();

treeMap.put(“java”,1);

treeMap.put(“hive”,2);

treeMap.put(“flume”,3);

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

for(Map.Entry<String,Integer> entry : set){

String key = entry.getKey();

Integer value = entry.getValue();

System.out.println(key+“—”+value);

}

}

}

在这里插入图片描述

按照key值的首字母进行排序

例2 key值为自定义的类的时候
一、用学生类Student实现Comparable接口的方式排序

package review.TreeMapDemo;

public class Student implements Comparable {

private String name;

private int age;

public Student() {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
进行排序

例2 key值为自定义的类的时候
一、用学生类Student实现Comparable接口的方式排序

package review.TreeMapDemo;

public class Student implements Comparable {

private String name;

private int age;

public Student() {

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-F9N67VpW-1715778521022)]

[外链图片转存中…(img-Z6izPisD-1715778521022)]

[外链图片转存中…(img-2v1t8nO3-1715778521023)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,不论你是刚入门Java开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值