Java集合 —— Map集合,springbootjpa教程

这篇博客详细介绍了Java中的Map集合,包括HashMap、LinkedHashMap和TreeMap的使用。内容涉及Map的遍历方式,如keySet()、values()和entrySet(),以及自定义类作为键时重写equals和hashcode的重要性。还提到了LinkedHashMap的存储和取出顺序一致性,以及TreeMap的排序功能,包括基于Comparable接口和Comparator的排序方式。
摘要由CSDN通过智能技术生成

//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

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

(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() {

}

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 + ‘’’ +

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值