最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出。初学者对于本篇博客只建议作为参考,欢迎留言共同学习。

  之前有介绍集合框架的体系概念(http://www.cnblogs.com/yjboke/p/8761195.html),本篇介绍一下Map的常用方法及常用工具类。


map基本查询方法:

  增加:put、putAll;

  删除:remove(输如键进行删除)、clear(删除集合所有元素)

  查询:get(输入键查询值)、size(查询集合长度)、values(查询所有值)

  判断:containsKey(判断键是否存在)、containsValue(判断值是否存在)、isEmpty(判断集合是否为null)

  具体操作方式可参考下方代码:

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

        map.put(1001, "zhangsan");
map.put(1003, "lisi");
map.put(1002, "wangwu");
map.put(1004, "maliu");
map.put(1004, "houqi");
map.put(null, "ainiyou"); //添加元素,可添加重复的键,但值会覆盖原所对应的值,可添加null,但只能有1个null。 System.out.println(map); //输出:{null=ainiyou, 1001=zhangsan, 1002=wangwu, 1003=lisi, 1004=houqi}
System.out.println(map.remove(1002)); //删除键为1002的键值对,并输出值“wangwu”,如没有该键,则输出null
System.out.println(map);
System.out.println(map.get(1002)); //查询键所对应的值,如没有该键,则输出null。
System.out.println(map.get(null)); //可直接查询null,输出对应的值:“ainiyou”
System.out.println(map.size()); //输出集合长度
System.out.println(map.values()); //输出所有的值:[ainiyou, zhangsan, lisi, houqi]
System.out.println(map.containsKey(1002)); //判断键是否存在,返回boolean
System.out.println(map.containsValue("lisi")); //判断值是否存在,返回boolean
map.clear(); //删除所有元素
System.out.println(map.isEmpty()); //判断是否为null,现已被清空,返回true

  基本操作方式如上,但是map集合不可直接使用迭代器输出元素,如果有需求的同学可以参考以下两种方法:

    keySet:

     Set<Integer> si = map.keySet();                                    //使用keySet方法获取所有的key,并存到Set集合中
for(Iterator<Integer> it = si.iterator(); it.hasNext();){ //将Set集合迭代输出
Integer key = it.next(); //获取key
String value = map.get(key); //获取key所对应的value
System.out.println("key:"+key + "; value :"+ value); //输出key和value
}

    entry:

  Set<Map.Entry<Integer, String>> entrySet = map.entrySet();                                //定义entrySet方法的set集合,去除key和value值
for(Iterator<Map.Entry<Integer, String>> it = entrySet.iterator(); it.hasNext(); ){ //使用迭代器取出key和value值
Map.Entry<Integer, String> me = it.next(); //将值存入me中
Integer key = me.getKey(); //分别取出
String value = me.getValue();
System.out.println("key:"+key + "; value :"+ value); //输出key和value
}

    以上两种方式的输出结果都为:

key:null; value :ainiyou
key:1001; value :zhangsan
key:1003; value :lisi
key:1004; value :houqi

  创建一个自定义类Book,使用上述方法进行输出,请见下方代码:

import java.util.*;
public class MapBookTest { public static void main(String[] args) {
Map<Book, String> bookMap = new HashMap<Book, String>();
bookMap.put(new Book(50, "1明朝那些事"), "京东");
bookMap.put(new Book(39, "2解忧杂货店"), "天猫");
bookMap.put(new Book(48, "3白夜行"), "当当网");
bookMap.put(new Book(59, "4官场笔记"), "亚马逊");
bookMap.put(new Book(48, "5白夜行"), "当当网");
//entrySet方法
Set<Map.Entry<Book, String>> entrySet = bookMap.entrySet();
for(Iterator<Map.Entry<Book, String>> it = entrySet.iterator(); it.hasNext();){
Map.Entry<Book, String> entry = it.next();
Book key = entry.getKey();
String value = entry.getValue();
System.out.println(key + ",购买自"+value);
}
//keySet方法
Set<Book> sb = bookMap.keySet();
for(Iterator<Book> it = sb.iterator(); it.hasNext();){
Book key = it.next();
String value = bookMap.get(key);
System.out.println(key + ",购买自"+value);
}
}
}
//实现接口让其具备比较性
class Book implements Comparable<Book>{ private String name;
private Integer price; public Book(Integer price,String name) {
super();
this.name = name;
this.price = price;
}
public void setPrice(Integer price){
this.price = price;
}
public int getPrice(){
return price;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public String toString(){
return name + "的价格为:"+price;
} //复写hashCode
public int hashCode(){
final int prime = 31;
int result = 1;
result = prime * result + price;
result = prime * result +name.hashCode()*result;
return result;
} //复写equals
public boolean equals(Object obj){
if(!(obj instanceof Book)){
throw new ClassCastException("请确认格式");
}
Book book = (Book)obj;
return book.name.equals(this.name) && book.price == this.price;
}
//复写比较器
public int compareTo(Book b){
int num = new Integer(this.price).compareTo(new Integer(b.price));
if(num == 0){
return this.name.compareTo(b.name);
}
return num;
}
}

因为HashMap是无序的,想要排序可将HashMap改为TreeMap,即可实现排序功能。如下方代码,以价格进行排序:

Map<Book, String> bookMap = new TreeMap<Book, String>();
bookMap.put(new Book(50, "明朝那些事"), "京东");
bookMap.put(new Book(39, "解忧杂货店"), "天猫");
bookMap.put(new Book(48, "白夜行"), "当当网");
bookMap.put(new Book(59, "官场笔记"), "亚马逊");
bookMap.put(new Book(48, "白夜行"), "当当网");
//entrySet方法
Set<Map.Entry<Book, String>> entrySet = bookMap.entrySet();
for(Iterator<Map.Entry<Book, String>> it = entrySet.iterator(); it.hasNext();){
Map.Entry<Book, String> entry = it.next();
Book key = entry.getKey();
String value = entry.getValue();
System.out.println(key + ",购买自"+value);
}

输出结果为:

解忧杂货店的价格为:39,购买自天猫
白夜行的价格为:48,购买自当当网
明朝那些事的价格为:50,购买自京东
官场笔记的价格为:59,购买自亚马逊

浅谈集合框架三、Map常用方法及常用工具类的更多相关文章

  1. 浅谈集合框架二 List、Set常用方法

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

  2. 浅谈集合框架五——集合框架扩展:Collections工具类的使用,自定义比较器

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

  3. 浅谈集合框架六——集合扩展:Arrays工具类、集合与数组相互转换方式;

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

  4. 浅谈集合框架四——集合扩展:集合循环输出方式及list输出方式的效率对比

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

  5. Java集合框架之四大接口、常用实现类

    Java集合框架 <Java集合框架的四大接口> Collection:存储无序的.不唯一的数据:其下有List和Set两大接口. List:存储有序的.不唯一的数据: Set:存储无序的 ...

  6. FileUtils常用方法 - commons-io常用工具类

    FileUtils常用常量 public static final long ONE_KB = 1024; public static final BigInteger ONE_KB_BI = Big ...

  7. 第19章 集合框架(3)-Map接口

    第19章 集合框架(3)-Map接口 1.Map接口概述 Map是一种映射关系,那么什么是映射关系呢? 映射的数学解释 设A,B是两个非空集合,如果存在一个法则,使得对A中的每一个元素a,按法则f,在 ...

  8. 浅谈c#的三个高级参数ref out 和Params C#中is与as的区别分析 “登陆”与“登录”有何区别 经典SQL语句大全(绝对的经典)

    浅谈c#的三个高级参数ref out 和Params   c#的三个高级参数ref out 和Params 前言:在我们学习c#基础的时候,我们会学习到c#的三个高级的参数,分别是out .ref 和 ...

  9. Java集合框架之Map接口浅析

    Java集合框架之Map接口浅析 一.Map接口综述: 1.1java.util.Map<k, v>简介 位于java.util包下的Map接口,是Java集合框架的重要成员,它是和Col ...

随机推荐

  1. python之高阶函数--map()和reduce()

    以下为学习笔记:来自廖雪峰的官方网站 1.高阶函数:简单来说是一个函数里面嵌入另一个函数 2.python内建的了map()和reduce()函数 map()函数接收两参数,一个是函数,一个是Iter ...

  2. 洛谷P1681 最大正方形II

    P1681 最大正方形II 题目背景 忙完了学校的事,v神终于可以做他的“正事”:陪女朋友散步.一天,他和女朋友走着走着,不知不觉就来到 了一个千里无烟的地方.v神正要往回走,如发现了一块牌子,牌子上 ...

  3. LeetCode141 Linked List Cycle. LeetCode142 Linked List Cycle II

    链表相关题 141. Linked List Cycle Given a linked list, determine if it has a cycle in it. Follow up:Can y ...

  4. PHPCMS快速建站系列之phpcms v9 模板标签说明整理

    [摘要]本文介绍phpcms v9中模板标签使用说明. {template "content","header"} 调用根目录下phpcms\template\ ...

  5. 网络流24题 搭配飞行员(DCOJ8000)

    题目描述 飞行大队有若干个来自各地的驾驶员,专门驾驶一种型号的飞机,这种飞机每架有两个驾驶员,需一个正驾驶员和一个副驾驶员.由于种种原因,例如相互配合的问题,有些驾驶员不能在同一架飞机上飞行,问如何搭 ...

  6. 如何编写go代码

    go是一种静态编译型的语言,它的编译速度非常快. go的官方编译器称为gc,包括编译工具5g,6g和8g,连接工具5l,6l和8l.其中的数字表示处理器的架构.我们不必关心如何挑选这些工具,因为go提 ...

  7. PHPExcel 去掉错误提示 保护表格

    $objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);

  8. Python基础:09函数式编程

    Python支持一些函数式编程的特性.比如lambda. map().reduce().filter()函数. 一:匿名函数与lambda Python可以用lambda 关键字创造匿名函数.匿名函数 ...

  9. GitOps:Kubernetes多集群环境下的高效CICD实践

    为了解决传统应用升级缓慢.架构臃肿.不能快速迭代.故障不能快速定位.问题无法快速解决等问题,云原生这一概念横空出世.云原生可以改进应用开发的效率,改变企业的组织结构,甚至会在文化层面上直接影响一个公司 ...

  10. @NOIP2018 - D2T3@ 保卫王国

    目录 @题目描述@ @题解@ @代码@ @题目描述@ Z 国有n座城市,n−1 条双向道路,每条双向道路连接两座城市,且任意两座城市 都能通过若干条道路相互到达. Z 国的国防部长小 Z 要在城市中驻 ...