Map接口常用的几种遍历方式与小练习
- keyset:获取所有的键,我们可以通过键获取值
- entryset:获取所有的键值对
- values:获取所有的值:此方法只能获取到value,无法获取key
package com.JiHe_.Map_;
import java.awt.print.Book;
import java.util.*;
public class Demo05 {
public static void main(String[] args) {
Map hashMap = new HashMap();
hashMap.put("邓超",new Book1("三国",100));//注意集合内是可以存放对象的
hashMap.put("邓超","孙俪");
hashMap.put("三国演义","雷霆嘎巴");
hashMap.put("三国演义","关羽");
hashMap.put(null,"jack");
hashMap.put("红楼",null);
hashMap.put("琅琊榜","江左梅郎");
//遍历的几种方法
//第一组,使用keySet
//1).通过使用迭代器,因为此时hashMap调用了keySet()方法,生成了一个Set类型的对象,且这个对象的引用指向key,因为它是Set类型所以可以使用迭代器
Set keyset = hashMap.keySet();
Iterator iterator = keyset.iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
System.out.println(next+"-"+hashMap.get(next));
}
System.out.println("==================================");
//2).增强for循环
for (Object key :keyset){
System.out.println(key+"-"+hashMap.get(key));
}
System.out.println("=====================================");
//第二组:把所有values取出,只能取出所有的value,无法去取key
Collection values = hashMap.values();
//1.使用迭代器
Iterator value = values.iterator();
while (value.hasNext()) {
Object o = value.next();
System.out.println( o);
}
//2.使用增强for循环
System.out.println("---------------------------");
for (Object n1:values){
System.out.println(n1);
}
//第三组,通过entrySet,来获取K-V
System.out.println("************通过entrySet*********");
Set set = hashMap.entrySet();//entrySet>
//迭代器
Iterator iterator1 = set.iterator();
while (iterator1.hasNext()) {
Object n2 = iterator1.next();//此时n2本来应该是object类型,但由于它最终指向了set,set又指向了hashMap,所以n2实际上还是指向Node类型
//我们若想要n2使用get方法来获取key与value,就应该吧n2向下转型变为Map.Entry类型
Map.Entry n5=(Map.Entry)n2;
System.out.println(n5.getKey()+" "+n5.getValue());
}
System.out.println("111111111111111111111111111111");
//2.增强for
for (Object o1:set){
//要将o1转化成Map.Entry
Map.Entry n3 = (Map.Entry)o1;
System.out.println(n3.getKey()+"-"+n3.getValue());
}
}
}
class Book1{
private String name;
private int prive;
public Book1(String name, int prive) {
this.name = name;
this.prive = prive;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrive() {
return prive;
}
public void setPrive(int prive) {
this.prive = prive;
}
}
练习作业
- 使用HashMap添加3个员工对象,
- 要求:键:员工id;值:员工对象
- 并且遍历显示 工资>18000的员工(便历方式至少两种)
- 员工类:姓名,工资,员工id
package com.JiHe_.Map_;
import com.sun.jmx.snmp.SnmpUnknownAccContrModelException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class xiTi {
public static void main(String[] args) {
//+ 使用HashMap添加3个员工对象,
//+ 要求:键:员工id;值:员工对象
//+ 并且遍历显示 工资>18000的员工(便历方式至少两种)
//+ 员工类:姓名,工资,员工id
HashMap hashMap = new HashMap();
hashMap.put(1,new staff("张飞",30000,1));
hashMap.put(2,new staff("刘备",20000,2));
hashMap.put(3,new staff("关羽",15000,3));
//方法一使用keySet方法
Set set = hashMap.keySet();
//拿到所有的key
for (Object o:set){
//通过所有的key获得hashMap中的Value,此时想要获得Value中的工资wages,就需要把hashMap.get(o)转型为staff对象,通过该对象就可调用getWages方法
staff a1 = (staff)hashMap.get(o);
if (a1.getWages()>18000){
//比较结束后输出比较通过的对象
System.out.println(a1);
}
}
//方法二使用entrySet()方法
Set set1 = hashMap.entrySet();
Iterator iterator = set1.iterator();
while (iterator.hasNext()) {
//对next对象进行转型,称为Map.Entry对象后,就能使用getKey,与getValue方法
Map.Entry next = (Map.Entry)iterator.next();
//使用next.getValue()获取Value,为了使获取的Value能够取到具体的工资值,再向下转型为staff,
staff value =(staff) next.getValue();
if (value.getWages()>18000){
//输出比较通过的value
System.out.println(value);
}
}
}
}
class staff{
private String name;
private double wages;
private int id;
public staff(String name,int wages,int id){
this.name =name;
this.wages=wages;
this.id=id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getWages() {
return wages;
}
public void setWages(double wages) {
this.wages = wages;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return "staff{" +
"name='" + name + ''' +
", wages=" + wages +
", id=" + id +
'}';
}
}