Java 如何在没有entrySet的情况下迭代HashMap
在原始java源代码中,我必须使用entrySet迭代hashmap,例如:Java 如何在没有entrySet的情况下迭代HashMap,java,Java,在原始java源代码中,我必须使用entrySet迭代hashmap,例如: for (Map.Entry<String, String> e : new Hash<String, String>().entrySet()) { } for(Map.Entry e:new Hash().entrySet()){ } 我希望有一种更简单的方法来迭代hashmap,如下所示: package ro.ex; import java.util.HashMap; impo
for (Map.Entry<String, String> e : new Hash<String, String>().entrySet()) {
}
for(Map.Entry e:new Hash().entrySet()){
}
我希望有一种更简单的方法来迭代hashmap,如下所示:
package ro.ex;
import java.util.HashMap;
import java.util.Map;
class Hash<K, V> extends HashMap<K, V> {
// how to implement?
}
public class Ex2 {
public static void main(String[] args) {
// i expect
for (Hash.Entry<String, String > e : new Hash<String, String>()) {
}
}
}
包装ro.ex;
导入java.util.HashMap;
导入java.util.Map;
类哈希扩展了HashMap{
//如何实施?
}
公共类Ex2{
公共静态void main(字符串[]args){
//我想
for(Hash.Entry e:new Hash()){
}
}
}
我的问题是如何实现它?实现Iterable
:
类哈希扩展HashMap实现Iterable{
@凌驾
公共迭代器迭代器(){
返回entrySet().iterator();
}
}
这是因为实现允许在for-each循环中使用该类型。作为@August答案的补充,虽然使
映射像这样直接可编辑并不困难,但这也不是一个好主意
- 您引入了一个新的
Hash
类,它不提供任何实质性的新功能。这真的只是一个方便的课程。额外的类意味着需要读取和维护更多的类,以及更大的运行时占用空间
- 为了使用
Hash
类,其他代码需要编码到Hash
类,而不是Map
接口。这使得无法直接用不同的map
实现类型替换map
- 您的
Hash
类可以说是不直观的。映射有三个(至少)方面可以迭代,但您选择了一个。。。原因通常不明显。(这就是为什么标准的Map
API没有实现Iterable
!!)
- 定义
HashMap
的子类时,会阻止JIT编译器在某些情况下优化某些方法调用的调度
现在这些东西都不是“表演的阻碍”。。。但另一方面,您所取得的成就是在for
循环中保存约10个字符
1-作为原始作者,这对你来说可能不是问题。但是,如果有人第一次遇到您的Hash
类,则必须阅读源代码或javadoc,以了解迭代的真正含义……从Java 8开始,迭代HashMap的最佳且最简单的方法是使用Lambda表达式。下面是要
Map Map=newhashmap();
普特地图(“罗伯特”,34岁);
普特地图(“基兰”,29);
地图。放置(“安迪”,44岁);
map.forEach((键,值)->{
系统输出打印项次(键);
System.out.println(值);});
entryset不是遍历映射的唯一方法。。。您可以使用键集、值或获取键的内部变量等。通过“更简单的方式”,您的意思是“无需键入.entrySet()
”?
class Hash<K, V> extends HashMap<K, V> implements Iterable<Map.Entry<K, V>> {
@Override
public Iterator<Entry<K, V>> iterator() {
return entrySet().iterator();
}
}
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("Robert", 34);
map.put("Kiran", 29);
map.put("Andy", 44);
map.forEach((key,value) -> {
System.out.println(key);
System.out.println(value);});