gpt4 book ai didi

java - 我需要哪种 Java 对象类型(集合/列表/集合/其他)?

转载 作者:行者123 更新时间:2023-12-02 11:02:03 28 4
gpt4 key购买 nike

我想存储一个对象集合,这些对象根据它们所代表的值进行键控。这些键可以重复。例如:

 [4] => Bob
[5] => Mary
[5] => Sue
[9] => Steve
[10] => Jason
[10] => Michelle

本质上,我想循环遍历这个并查看每个键并说,“是否存在另一个对象(在本例中为人),其键与当前键的距离在 1 以内?如果是,则将它们匹配并将它们从 Collection 。”我将迭代上例中的“1”值,直到集合为空(或者在奇数场景中剩余一个对象)。

我不相信我尝试的方式是最好的方式,所以我也愿意接受反馈。

最佳答案

你想要一个MultimapGuava提供该接口(interface)和各种子接口(interface)如ListMultimap , SetMultimapSortedSetMultimap取决于您想要将值存储在哪种集合中。然后它提供各种实现,例如 ArrayListMultimapHashMultimap ,以及 Multimaps 中与它们一起使用的各种实用程序.

在 Java 中执行此操作的传统方法类似于 Map<K, List<V>> , Map<K, Set<V>>等等,但是维护值集合非常繁琐,并且各种本应简单的操作(例如只为键赋值)却比它们需要的复杂得多。

Multimap旨在作为一种数据结构,专门设计用于对映射到单个键的多个值进行建模(与 Map 不同)。鉴于此,它使操作如您所期望的一样简单:

ListMultimap<Integer, String> m = ArrayListMultimap.create();
m.put(4, "Bob");
m.put(5, "Mary");
m.put(5, "Sue");
...

for (String name : m.get(5)) { ... } // iterates ["Mary", "Sue"]

如果您想确保相同的值不会两次映射到单个键并且不关心值的顺序,则可以使用 SetMultimap而不是ListMultimap

我不确定你的意思是“是否存在另一个对象,其键与当前键的距离在 1 以内?如果是,请将它们匹配并将它们从集合中删除。”但如果我没读错的话,你可以这样做:

for (Integer key : m.keySet()) {
Collection<String> people = m.get(key);
Collection<String> peopleOneLower = m.get(key - 1); // empty if there are none
...
}

或者,您可以使用 TreeMultimap<Integer, String> 做一些事情它将对其键集和值集进行排序。

关于java - 我需要哪种 Java 对象类型(集合/列表/集合/其他)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4348253/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com