【补充版】HashMap(根据value筛选查找)
HashMap查找之根据Value查找
一般大家都知道对于HashMap而言都是通过key来进行查找。找到了key自然对应的value也就一并找到了。但是有些情况下就需要通过value来进行判断查找。说是查找不如说筛选更为恰当。
那么什么情况下会用到这种vaule查找方式呢?让我们一起来看一下以下代码就清楚了。
【1】面向对象学生类的创建
package com.java.demo_9; /**
* Student类
* @author liupeng
*
*/
public class Student { private String stuName;
private String classCord;
private String stuNumber;
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getClassCord() {
return classCord;
}
public void setClassCord(String classCord) {
this.classCord = classCord;
}
public String getStuNumber() {
return stuNumber;
}
public void setStuNumber(String stuNumber) {
this.stuNumber = stuNumber;
}
public Student() {
super();
// TODO Auto-generated constructor stub
}
public Student(String stuName,String stuNumber,String classCord) {
super();
this.stuName = stuName;
this.classCord = classCord;
this.stuNumber = stuNumber;
}
@Override
public String toString() {
return "学员名称:" + stuName + ", 学员编号:"
+ stuNumber + ", 班级番号:" + classCord;
} }
Student(学生类)
【2】面向对象筛选出相同classCord的同学
package com.java.demo_9; import java.util.ArrayList;
import java.util.HashMap; public class HashMapTest2 {
public static void main(String[] args) {
HashMap map = new HashMap(); //HashMap字典的创建并遍历出各个元素 System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("\t\t<学员信息一览表>\t\t");
System.out.println();
Student st1 = new Student("王小天", "cn0001", "class0001");
Student st2 = new Student("张天爱", "cn0002", "class0002");
Student st3 = new Student("武则天", "cn0003", "class0003");
Student st4 = new Student("小钢炮", "cn0004", "class0004");
Student st5 = new Student("屠龙刀", "cn0005", "class0002");
Student st6 = new Student("小龙女", "cn0008", "class0002");
Student st7 = new Student("三毛", "cn0006", "class0001");
Student st8 = new Student("杨过", "cn0007", "class0002"); map.put("王小天", st1);
map.put("张天爱", st2);
map.put("武则天", st3);
map.put("小钢炮", st4);
map.put("屠龙刀", st5);
map.put("小龙女", st6);
map.put("三毛", st7);
map.put("杨过", st8); for (Object key : map.keySet()) {
// System.out.println(key);
Student value = (Student) map.get(key);
System.out.println(key + ":" + value);
} System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println();
//创建3个ArrayList列表便于接受数据
ArrayList list1 = new ArrayList();
ArrayList list2 = new ArrayList();
ArrayList list3 = new ArrayList();
//通过for循环,if else循环语句来筛选隶属于相同班级的学生(list3例外)
for(Object key:map.keySet()){
Student obj = (Student)map.get(key);
System.out.println(obj);
if(obj.getClassCord().contains("class0002")){
list1.add(obj);
}else if(obj.getClassCord().indexOf("class0001")!=-1){
list2.add(obj);
}else{
list3.add(obj);
}
} //分别遍历出筛选过后的结果
System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("[class0002班级的学生有:]");
System.out.println(); for(Object obj:list1)
System.out.println(obj); System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("[class0001班级的学生有:]");
System.out.println(); for(Object obj:list2)
System.out.println(obj); System.out.println("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("[其他班级的学生有:]");
System.out.println(); for(Object obj:list3)
System.out.println(obj); } }
结果:
【HashMap原字典信息】
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
<学员信息一览表> 三毛:学员名称:三毛, 学员编号:cn0006, 班级番号:class0001
屠龙刀:学员名称:屠龙刀, 学员编号:cn0005, 班级番号:class0002
张天爱:学员名称:张天爱, 学员编号:cn0002, 班级番号:class0002
小龙女:学员名称:小龙女, 学员编号:cn0008, 班级番号:class0002
杨过:学员名称:杨过, 学员编号:cn0007, 班级番号:class0002
小钢炮:学员名称:小钢炮, 学员编号:cn0004, 班级番号:class0004
王小天:学员名称:王小天, 学员编号:cn0001, 班级番号:class0001
武则天:学员名称:武则天, 学员编号:cn0003, 班级番号:class0003
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
【属于class0002班级学员的信息】
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++ [class0002班级的学生有:] 学员名称:屠龙刀, 学员编号:cn0005, 班级番号:class0002
学员名称:张天爱, 学员编号:cn0002, 班级番号:class0002
学员名称:小龙女, 学员编号:cn0008, 班级番号:class0002
学员名称:杨过, 学员编号:cn0007, 班级番号:class0002
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
【属于class0001班级学员的信息】
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[class0001班级的学生有:] 学员名称:三毛, 学员编号:cn0006, 班级番号:class0001
学员名称:王小天, 学员编号:cn0001, 班级番号:class0001
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
【其他班级学员的信息】
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
[其他班级的学生有:] 学员名称:小钢炮, 学员编号:cn0004, 班级番号:class0004
学员名称:武则天, 学员编号:cn0003, 班级番号:class0003
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
总结:
1. 创建3个ArrayList列表分别用来存放不同班级的信息.
2. 通过if ,else if ,else语句来判断属于不同班级的学生(根据classCord来判断)
3. 通过面向对象的方法调用Student类中.getClassCord()获取到classCord.
4. 通过.contains("元素"),.indexOf("元素")!=-1的任意一种方式结合if,else语句来进行筛选判断.
5. 分别遍历3个ArrayList中存入的元素.
方法很简单,相信java大神们肯定有更便捷的方法同样能够做到更好的效果。但是我是java初学者,这篇文章在此的目的只是希望能够帮助跟我一样初学java的同学们。
希望能有所帮助,谢谢。
【补充版】HashMap(根据value筛选查找)的更多相关文章
- 详解什么是平衡二叉树(AVL)(修订补充版)
详解什么是平衡二叉树(AVL)(修订补充版) 前言 Wiki:在计算机科学中,AVL树是最早被发明的自平衡二叉查找树.在AVL树中,任一节点对应的两棵子树的最大高度差为1,因此它也被称为高度平衡树.查 ...
- java 中linq 的使用方式 筛选 查找 去重
1.筛选 $.Enumerable.From(value).Where(function(x) {//value 为被操作的内容 return x.name == name;//第一个name为val ...
- python基础语法20 面向对象5 exec内置函数的补充,元类,属性查找顺序
exec内置函数的补充 exec: 是一个python内置函数,可以将字符串的代码添加到名称空间中; - 全局名称空间 - 局部名称空间 exec(字符串形式的代码, 全局名称空间, 局部名称空间) ...
- 有趣的条漫版 HashMap,25岁大爷都能看懂
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...
- 数据结构(C语言版)-第7章 查找
7.1 查找的基本概念 查找表: 由同一类型的数据元素(或记录)构成的集合静态查找表: 查找的同时对查找表不做修改操作(如插入和删除)动态查找表: 查找的同时对查找表具有修改操作关键 ...
- 深入理解HashMap(原理,查找,扩容)
面试的时候闻到了Hashmap的扩容机制,之前只看到了Hasmap的实现机制,补一下基础知识,讲的非常好 原文链接: http://www.iteye.com/topic/539465 Hashmap ...
- linux下命令的全称,方便记忆(转)-修改补充版
su:Swith user 切换用户,切换到root用户 cat: Concatenate 串联(cat(Concatenate)命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容, ...
- 面经手册 · 第4篇《HashMap数据插入、查找、删除、遍历,源码分析》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在上一章节我们讲解并用数据验证了,HashMap中的,散列表的实现.扰动函数.负载因 ...
- mongodb索引--1亿条记录的查询从55.7秒到毫秒级别<补充版>
从头开始,验证mongodb的索引的好处.(window7环境下) 下载mongodb服务器,并解压到d盘,并使用以下命令启动 mongod --dbpath D:\mongodb\data mong ...
随机推荐
- Mysql查询英文如何严格区分大小写?
1. 前提:在Mysql数据库中进行查询时,希望英文严格区分大小写.默认情况下是不区分大小写的.2. 演示如下:在数据库表emp中,job字段中存储的值有'Engineer',现在的情况是,下面的两句 ...
- Sql Server 2008和2000查询表的字段和注释
-- SQL Server 2008 SELECT 表名 = d.name, 表说明 = case when a.colorder=1 then isnull(f.value,'') else '' ...
- JavaScript的toString()和valueof()方法
toString()方法: 函数:函数 (function(){}).toString(); //返回"function(){}" typeof((function(){}).to ...
- 莫名其妙MyEclipse
MyEclipse Enterprise Workbench Version: 2015 Stable 2.0Build id: 13.0.0-20150518 整合SS时,\WEB-INF\clas ...
- IIS 发布添加网站错误:HTTP 错误 500.21 - Internal Server Error 解决方案
原因:在安装Framework v4.0之后,再启用IIS,导致Framework没有完全安装 解决:开始->所有程序->附件->鼠标右键点击“命令提示符”->以管理员身份运行 ...
- MonkeyRunner测试一MonkeyRunner的使用
最近搭建MonkeyRunner开发环境,安装PyDev时,饱受折磨,现在终于搞定.因为一些原因,用了JDK1.6,在线安装插件PyDev成功后,Windows-Preferences里找不到PyDe ...
- NOIP模拟赛-护花
[题目描述] 约翰留下他的N(N<=100000)只奶牛上山采木.他离开的时候,她们像往常一样悠闲地在草场里吃草.可是,当他回来的时候,他看到了一幕惨剧:牛们正躲在他的花园里,啃食着他心爱的美丽 ...
- (Hibernate进阶)Hibernate映射——多对多关联映射(八)
多对多映射是现实生活中最常见的映射,也是最容易理解的映射.废话少说,直接开始. 映射原理 不论是单向关联还是双向关联都是通过第三张表,将两个表中的主键放到第三张做一个关联.用第三张表来解决可能会造成数 ...
- Valgrind 发现程序的内存问题
参考 : [1]. 应用 Valgrind 发现 Linux 程序的内存问题. http://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/ [2 ...
- 读艾伦的jQuery的无new构建,疑惑分析——jquery源码学习一
背景: 有心学习jquery源码,苦于自己水平有限,若自己研究,耗时耗力,且读懂之日无期. 所以,网上寻找高手的源码分析.再经过自己思考,整理,验证.以求有所收获. 此篇为读高手艾伦<jQuer ...