对于一个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的类型?
展开
 我来答
1006332009
推荐于2018-05-17 · TA获得超过205个赞
知道答主
回答量:55
采纳率:0%
帮助的人:53.8万
展开全部
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是因为包访问控制的原因,默认是包访问控制,只能在统一包内才能访问,包外是不可见的。
tanzhangwen
2012-08-09 · TA获得超过1136个赞
知道小有建树答主
回答量:499
采纳率:0%
帮助的人:855万
展开全部
Map中定义了内部类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并不存在这样一个类
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式