为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

WXWX 2018-08-15 16:00:30
Collection<V> values();map的values()方法返回的是Collection接口,但是如下代码Map<Integer,String> map = new TreeMap<Integer,String>(); map.put(1, "one"); map.put(2, "two"); Collection<String> collection = map.values(); System.out.println(collection.size());却能正确的输出,请问这里collection.size()是调用了哪个子类的方法吗?其次,ArrayList<String> list = new ArrayList<String>(map.values());以接口为参数是因为该接口的子类必然实现了它的方法,但是这里map.values()返回值是Collection接口,那么在ArrayList(Collection<? extends E> c)构造方法怎么能行得通呢?
查看完整描述

1 回答

?
yanrun

TA贡献317条经验 获得超240个赞

看一下java的源码(java8):

public Collection<V> values() {        
    Collection<V> vs = values;        
    if (vs == null) {            
        vs = new Values();            
        values = vs;        
    }        
    return vs;    
 }

可以看出values方法返回的是Values类的对象,再看一下Values类,它是Treemap的一个内部类:

class Values extends AbstractCollection<V> {        
    public Iterator<V> iterator() {            
        return new ValueIterator(getFirstEntry());        
    }        
    public int size() {            
        return TreeMap.this.size();        
    }        
    public boolean contains(Object o) {            
        return TreeMap.this.containsValue(o);        
    }        
    public boolean remove(Object o) {            
        for (Entry<K,V> e = getFirstEntry(); e != null; e = successor(e)) {                
            if (valEquals(e.getValue(), o)) {                    
                deleteEntry(e);                    
                return true;                
            }            
        }            
        return false;        
    }        
    public void clear() {            
        TreeMap.this.clear();        
    }        
    public Spliterator<V> spliterator() {            
        return new ValueSpliterator<K,V>(TreeMap.this, null, null, 0, -1, 0);        
    }    
}

Values继承了AbstractCollection,把它看做一个类似ArrayList的集合类就好了

查看完整回答
反对 回复 2018-08-15
  • 1 回答
  • 0 关注
  • 1676 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信