当前位置:  开发笔记 > 编程语言 > 正文

收藏地图

如何解决《收藏地图》经验,为你挑选了2个好方法。

我想用Java制作集合地图,所以我可以制作类似的东西

public void add(K key, V value) {  
    if (containsKey(key)) {
        get(key).add(value);
    } else {
        Collection c = new Collection();
        c.add(value);
        put(key, value);
    }
}

我试图用类似的东西制作它

public class CollectionMap> extends HashMap

但编译器抱怨该部分,并且仍然存在制作适当的新集合的问题.

目前,我已经创建了两个类:SetMap,看起来像这样

 1: public class SetMap extends HashMap> {
 2: 
 3:    public void add(K key, V value) {
 4:        if (containsKey(key)) {
 5:            get(key).add(value);
 6:        } else {
 7:            Set list = new HashSet();
 8:            list.add(value);
 9:            put(key, list);
10:        }
11:    }
12:
13: }

和ListMap看起来几乎相同,除了我创建新ArrayList的第7行.这种重复小到可以容忍,但问题仍然存在于Java中这种"嵌套泛型"可能吗?

编辑:

正如埃里克森所说,解决方案>不仅仅是解决方案>

所以代码看起来像

public abstract class CollelctionMap> extends HashMap {

    protected abstract C newCollection();

    public void add(K key, V value) {
        if (containsKey(key)) {
            get(key).add(value);
        } else {
            C c = newCollection();
            c.add(value);
            put(key, c);
        }
    }
}

而ListMap和SetMap只提供适当的集合



1> erickson..:

如果map是a Map>,请使用成语computeIfAbsent(...).add(...),如下所示:

map.computeIfAbsent(key, k -> new ArrayList<>()).add(value);

或者,对于Set:

map.computeIfAbsent(key, k -> new HashSet<>()).add(value);



2> Jack Leow..:

如果是一个选项,您可能只想使用Google Collections API - http://code.google.com/p/google-collections/.

即使你不能使用它,也许看看他们如何实现他们的MultiMaps将帮助你实现.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有