专栏首页青柠小鱼Java中的Map双边队列

Java中的Map双边队列

1.1 什么是Map

键(Key)值(Value)对 邓超 = 娘娘 贝克汉姆 = 维多利亚 黄磊 = 孙莉 吴京 = 谢楠

表格: 姓名:张三 年龄:23 性别:男

程序开发大部分数据都是键值对形式的 MySQL JSON XML 类对象成员变量和存储的数据 从前端发送的数据也可以转成Map格式 ==> 一键生成 ==> 类对象 ==> 一键存储 ==> 数据库

interface Map<K, V> –| class HashMap<K, V> 哈希表结构 –| class TreeMap<K, V> 底层是树形结构,存储要求K有对应的排序方式 Map双边队列中键(Key)是唯一的,但是值(Value)可以重复

1.2 Map<K, V>双边队列方法

增: put(K k, V v); 存入一个键值对类型,K和V都要符合泛型约束 putAll(Map<? extends K, ? extends V> map); 存入另一个Map双边队列,并且要求添加的Map双边对接中的K和V都要和当前Map中存储 的K和V一致 删: remove(Object k); 删除对应K的键(Key)值(Value)对 改: put(K k, V v); 对应当前K存在,修改对应内容 查: int size(); 当前Map双边队列中,有效键值对个数 boolean isEmpty(); 是否为空 boolean containsKey(Object key); 判断指定的Key是否存在 boolean containsValue(Object value); 判断指定Value是否存在 Set keySet(); 返回整个Map双边队列中所有Key对应的Set集合

【注意】 一个方法使用set结尾,表示该方法返回的是一个集合类型,大多是情况下都 是Set类型 Collection values(); 返回整个Map双边队列中所有Value对应的Collection集合 【注意】 方法名如果是一个复数,返回值类型集合或者是数组情况居多

1.3 EntrySet

Entry 可以认为是键值对对象 定义在Map类内 class Entry<K, V> { K k; V v; } K,V是完全依赖于Map约束的,这里可以Entry里面保存的是每一个键值对类对象

Map中提供了一个方法 Set<Entry<K, V>> entrySet 返回值是键值对类对象Set集合 Set集合中存储的是Entry类型 Entry类型是带有泛型的

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class Demo2 {
	public static void main(String[] args) {
		HashMap<String, String> map = new HashMap<String, String>();
		
		map.put("吴京", "谢楠");
		map.put("邓超", "娘娘");
		map.put("黄磊", "孙莉");
		map.put("王宝强", "XX");
		
		Set<Map.Entry<String, String>> entrySet = map.entrySet();
		
		System.out.println(entrySet);
	}
}

1.4 TreeMap<K, V> 以及Comparable和Comparator

K是需要有对应的比较方式,如果没有比较方式,无法存入。

推荐使用Comparator接口

import java.util.Comparator;
import java.util.TreeMap;

public class Demo3 {
	public static void main(String[] args) {
		TreeMap<String,String> map = new TreeMap<String, String>();
		
		map.put("李四", "1");
		map.put("王五", "1");
		map.put("赵六", "1");
		map.put("张三", "1");
		
		System.out.println(map);
		
		TreeMap<Dog,String> map2 = new TreeMap<Dog, String>(new Comparator<Dog>() {

			@Override
			public int compare(Dog o1, Dog o2) {
				return o1.getAge() - o2.getAge();
			}
		});
		
		map2.put(new Dog("王可可", 1), "111"); 
		map2.put(new Dog("八公", 2), "111"); 
		map2.put(new Dog("豆豆", 3), "111"); 
		map2.put(new Dog("老黄", 4), "111"); 
		map2.put(new Dog("旺财", 5), "111"); 
		
		System.out.println(map2);
		
	}
} 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 第三周学习总结思维导图

    用户7073689
  • java学习第二周思维导图

    用户7073689
  • 第一周总结思维导图

    用户7073689
  • JS魔法堂:不完全国际化&本地化手册 之 实战篇

    前言  最近加入到新项目组负责前端技术预研和选型,其中涉及到一个熟悉又陌生的需求——国际化&本地化。熟悉的是之前的项目也玩过,陌生的是之前的实现仅仅停留在"有"...

    ^_^肥仔John
  • 安卓开发遇到的奇葩问题

    第一个问题:R cannot be resolved to a variable 来自网络: Android开发过程中,碰到R cannot be resolv...

    苦咖啡
  • Hadoop MapReduce 工作过程

    一个MapReducer作业经过了input,map,combine,reduce,output五个阶段,其中combine阶段并不一定发生,map输出的中间结...

    smartsi
  • 解放双手,使用批处理达到账号密码之类再也用不着手动输入!

    前面给大家介绍这个技巧,没有给大家具体的实例附件,可能大多数人都不太读的懂这个,毕竟很多都是新手,没怎么去了解过。又因为有不少童鞋问我,所以今天给大家具体的例子...

    FreeRonin
  • MYSQL数据库常用知识整理

    MySQL[是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体...

    明哥的运维笔记
  • DDOS常见的类型有哪些?

    之前讲过DDOS有哪些类型,但是因为时间问题没有那么详细的去分享。并且最近有几个客户被攻击后,也不确定是受到什么样的攻击,因此,再写一些关于DDOS的种类分享给...

    墨者盾
  • Julia机器核心编程.多重分配

    在开始深入探讨多重分派这个主题之前,我们先问自己一个简单的问题:分派到底是什么意思?用最简单的术语来解释,分派的意思就是发送!

    云深无际

扫码关注云+社区

领取腾讯云代金券