在HashMap中,有一个明显的特征。在存储的时候,会有一个键值对的关系。键和值存在着一一对应(映射)的关系。而HashMap中的键相当与Set,无序不可重复。因此,在遍历的时候可以用Set集合得到HashMap中的键,然后通过Set集合得到迭代器,最后用迭代器遍历。
遍历方式
1.直接用for循环遍历
public static void print_for(HashMap<Integer,String> stu){
Set<Integer> integers = stu.keySet();//keySet得到键 放入set集合中
//第一个元素 判断下一个是否为空 缺省
for (Iterator<Integer> iterator = integers.iterator();iterator.hasNext();){//从第一个开始遍历
Integer next = iterator.next();
System.out.println("ID:"+next+" 姓氏:"+stu.get(next));//通过键得到值
}
}
2.foreach(增强for循环)
public static void print_foreach(HashMap<Integer,String> stu){
Set<Integer> set=stu.keySet();
for (Integer st:set) {//foreach
System.out.println("ID:"+st+" 姓氏:"+stu.get(st));
}
}
3.while循环,用迭代器得到键
public static void print_while(HashMap<Integer,String> stu){
Iterator<Integer> it=stu.keySet().iterator();//直接得到Integer类型的迭代器
while (it.hasNext()){
Integer id=it.next();//得到第一个键
System.out.println("ID:"+id+" 姓氏:"+stu.get(id));
}
}
4.while循环,用迭代器得到键值对
public static void print_while_entry(HashMap<Integer,String> stu){
Iterator it=stu.entrySet().iterator();//entrySet 得到键值对的迭代器
while (it.hasNext()){
Map.Entry entry= (Map.Entry) it.next();//得到键值对
Integer id=(Integer)entry.getKey();//得到键
String name=(String)entry.getValue();//得到值
System.out.println("ID:"+id+" 姓氏:"+name);
}
}
打印结果
public static void main(String[] args) {
HashMap<Integer,String> student=new HashMap<Integer, String>();
student.put(1,"赵"); student.put(2,"钱");
student.put(3,"孙"); student.put(4,"李");
//for循环
print_for(student);
System.out.println("=====================");
//foreach
print_foreach(student);
System.out.println("=====================");
//while
print_while(student);
System.out.println("=====================");
//while-entry
print_while_entry(student);
}
四次输出的结果完全一至
总结
第一种遍历方式和第二种差不多,而第三种遍历方式和第四种就有所区别。第三种通过迭代器得到了HashMap中的键,然后在遍历的过程中,通过键去查找值。第四种方法直接用迭代器得到键值对,在遍历的时候直接得到键和值,会少一次通过键找值的过程(不会用到get方法)。所以,第四种遍历方式效率是最高的。
每日鸡汤:如果你真的愿意去努力,你人生最坏的结果不过大器晚成!
Over!