对于一个HashMap,使用其Entry,只能使用Map.Entry,HashMap.Entry为啥不能直接用?
我们遍历HashMap的值域,可以使用增强型循环:for(Map.Entryentry:myMap.entrySet()){System.out.println(entr...
我们遍历HashMap的值域,可以使用增强型循环: for(Map.Entry entry: myMap.entrySet()) {
System.out.println(entry.getValue());
}
为什么不能直接使用HashMap.Entry来声明entry的类型? 展开
System.out.println(entry.getValue());
}
为什么不能直接使用HashMap.Entry来声明entry的类型? 展开
2个回答
展开全部
Entry在HashMap中的声明为static class Entry<K,V> implements Map.Entry<K,V>,虽然它声明在HashMap内,但是因为声明为static,对我们而言它就是外部类了,如果要用HashMap中的Entry的话,直接Entry就可以了,不能HashMap.Entry,而在Map中,Entry的声明为interface Entry<K,V>,他是内部接口,用的话必须得Map.Entry来使用。
之所以不能用HashMap.Entry是因为包访问控制的原因,默认是包访问控制,只能在统一包内才能访问,包外是不可见的。
之所以不能用HashMap.Entry是因为包访问控制的原因,默认是包访问控制,只能在统一包内才能访问,包外是不可见的。
展开全部
Map中定义了内部类Map.Entry
HashMap实现了Map,因而继承了它的内部类Map.Entry
但是HashMap没有自己定义一个HashMap.Entry
内部类相当于其中的一个元素,它是什么类型就必须是什么类型
所以不存在HashMap.Entry,只有Map.Entry
HashMap实现了Map,因而继承了它的内部类Map.Entry
但是HashMap没有自己定义一个HashMap.Entry
内部类相当于其中的一个元素,它是什么类型就必须是什么类型
所以不存在HashMap.Entry,只有Map.Entry
追问
我.自.己.做.了.个.D.e.m.o:如.果.把.HashMap.里.的.Entry.的.内.部.静.态.类.前,加.上p.u.b.l.i.c,就.能.H.a.s.h.M.a.p.E.n.t.r.y.来.访.问。但.是.M.a.p.的.内.部.接.口.E.n.t.r.y.并.没.有.标.明.为.p.u.b.l.i.c.的.就.可.以.直.接.M.a.p.E.n.t.r.y.使.用,求.解.释。(防和谐,没办法,凑合看吧)
追答
Map.Entry只是一个类interface,相当于iterator来获取entryset
public static interface Map.Entry
A map entry (key-value pair). The Map.entrySet method returns
a collection-view of the map, whose elements are of this class. The
only way to obtain a reference to a map entry is from the
iterator of this collection-view. These Map.Entry objects are
valid only for the duration of the iteration; more formally,
the behavior of a map entry is undefined if the backing map has been
modified after the entry was returned by the iterator, except through
the iterator's own remove operation, or through the
setValue operation on a map entry returned by the iterator.
-------------------
Map中定义了该inner class
static interfaceMap.Entry
-------------
HashMap继承自Map,所以也有该interface
Inner classes inherited from class java.util.Map
而你说的HashMap.Entry 问题是没有该interface
我不知道你的demo是怎么写的,我估计你成功是因为你重写的HashMap中定义了一个新的内部类HashMap.Entry,并且它实现了类似Map.Entry功能,你写的不是继承自Map.Entry的
但是可以肯定的是库中提供的HashMap并没有
主要是在于如果Entry是Map的一个成员或类,Map.Entry可以访问,HashMap.Entry也应该存在
但是现在貌似Map中的内部类名字是叫Map.Entry,它们是一个完整组合体,那么HashMap继承的当然也是这个组合体,而HashMap.Entry并不存在这样一个类
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询