使用TreeMap而不是HashMap的番石榴multimap?

发布于 2024-11-17 12:56:53 字数 277 浏览 2 评论 0原文

我有类似以下内容:

final SortedMap<Integer,List<Integer>> m = new TreeMap<Integer,List<Integer>>();

我想使用 google-guava 使其成为多重地图。但是,我没有看到任何提供包含 ArrayList 的 SortedMap 的实现。我只看到HashMap+ArrayList实现(ArrayListMultimap)。我想要的实现存在吗?

I have something like the following:

final SortedMap<Integer,List<Integer>> m = new TreeMap<Integer,List<Integer>>();

And I'd like to use google-guava to make this a multimap. However I don't see any implementation that provides a SortedMap holding an ArrayList. I only see HashMap+ArrayList implementation (ArrayListMultimap). Does the implementation that I want exist?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

若言繁花未落 2024-11-24 12:56:53

Guava 有一个 TreeMultimap 按排序顺序存储键和值。但是,这使用 TreeSet 作为值而不是 List,因此它可能不是您想要的。在这种情况下,Guava 允许您使用 Multimaps.new*Multimap 方法之一创建一个以任何您想要的方式工作的 Multimap,例如 Multimaps.newListMultimap。要使一个像您所描述的那样工作,您只需编写以下内容:

Map<Integer, Collection<Integer>> map = Maps.newTreeMap();
ListMultimap<Integer, Integer> m = Multimaps.newListMultimap(map,
    new Supplier<List<Integer>>() {
      public List<Integer> get() {
        return Lists.newArrayList(); // assuming you want to use ArrayList
      }
    });

Guava has a TreeMultimap that stores both keys and values in sorted order. However, this uses a TreeSet for the values rather than a List so it may not quite be what you want here. In that case, Guava allows you to create a Multimap that works any way you want using one of the Multimaps.new*Multimap methods, such as Multimaps.newListMultimap. To make one that works like you describe, you'd just write this:

Map<Integer, Collection<Integer>> map = Maps.newTreeMap();
ListMultimap<Integer, Integer> m = Multimaps.newListMultimap(map,
    new Supplier<List<Integer>>() {
      public List<Integer> get() {
        return Lists.newArrayList(); // assuming you want to use ArrayList
      }
    });
白况 2024-11-24 12:56:53

以下是创造这只野兽的方法:

Multimap<Integer,Integer> multimap = Multimaps.newListMultimap(
    Maps.<Integer, Collection<Integer>>newTreeMap(),
    new Supplier<List<Integer>>() {
        public List<Integer> get() {
            return Lists.newArrayList();
        }
    });

Here's how you can create that beast:

Multimap<Integer,Integer> multimap = Multimaps.newListMultimap(
    Maps.<Integer, Collection<Integer>>newTreeMap(),
    new Supplier<List<Integer>>() {
        public List<Integer> get() {
            return Lists.newArrayList();
        }
    });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文