在线
客服

发布
需求

天盟
APP

天盟APP下载

关注
微信

微信扫一扫访问
顶部

关于map.values()的一点疑问?

Collection values();map的values()方法返回的是Collection接口,但是如下代码
Map map = new TreeMap();map.put(1, "one");map.put(2, "two");Collection collection = map.values();System.out.println(collection.size());却能正确的输出,请问这里collection.size()是调用了哪个子类的方法吗?
其次,
ArrayList list = new ArrayList(map.values());以接口为参数是因为该接口的子类必然实现了它的方法,但是这里map.values()返回值是Collection接口,那么在
ArrayList(Collection

免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。

版权声明:作者保留权利,不代表天盟立场。

使用道具 举报

全部参与1

看一下java的源码(java8):

publicCollectionvalues(){Collectionvs=values;if(vs==null){vs=newValues();values=vs;}returnvs;}可以看出values方法返回的是Values类的对象,再看一下Values类,它是Treemap的一个内部类:
classValuesextendsAbstractCollection{publicIteratoriterator(){returnnewValueIterator(getFirstEntry());}publicintsize(){returnTreeMap.this.size();}publicbooleancontains(Objecto){returnTreeMap.this.containsValue(o);}publicbooleanremove(Objecto){for(Entrye=getFirstEntry();e!=null;e=successor(e)){if(valEquals(e.getValue(),o)){deleteEntry(e);returntrue;}}returnfalse;}publicvoidclear(){TreeMap.this.clear();}publicSpliteratorspliterator(){returnnewValueSpliterator(TreeMap.this,null,null,0,-1,0);}}Values继承了AbstractCollection,把它看做一个类似ArrayList的集合类就好了

使用道具 举报

发新帖
国内首家创新型IT技术需求众包服务平台,软件需求就上天盟网! 立即登录 立即注册