【发布时间】:2013-04-16 15:47:11
【问题描述】:
第一次在这里发帖,我对 Java(和一般编程)非常陌生!
我正在尝试了解如何在地图包含其他集合时对其进行操作。我正在尝试编写代码来将名称存储为针对 Map 中的整数集的值的键。然后,我希望能够返回具有给定范围内的元素的任何值的键。
Map<String, Set<Integer>> index = new TreeMap<>();
Set<Integer> numbers = new TreeSet<>;
numbers.add(80);
numbers.add(90);
numbers.add(100);
index.put("Adam", numbers);
numbers = new TreeSet<>();
numbers.add(30);
numbers.add(40);
numbers.add(50);
index.put("Eve", numbers);
我现在有一个带有键“Adam”和值 [80,90,100] 的条目和另一个带有键“Eve”和值 [30,40,50] 的条目的 Map。至少我认为我有!
我现在希望能够返回任何包含在给定范围内的值的键的名称。
例如,如果范围是 25 到 50,则返回值为“Eve”。 如果范围是 50 到 85,则返回值将是“Adam”和“Eve”。
我认为 containsValue() 可能有效但无效(因为 Set?)。
任何指导将不胜感激。
【问题讨论】:
-
对您的问题域一无所知:您是否考虑过相反的情况 - 使用数字作为键,使用一组名称作为 TreeMap 中的值?根据您的描述,这似乎适合您的使用方式。
-
谢谢,您的问题刚刚突出了另一个问题。可能有重复的值,所以我不能按照你的建议做,但我也不能使用 TreeSet。我认为我需要一个 ArrayList?
-
如果你想避免重复,你会使用 Set 而不是 List;并且只有在需要对其进行排序(通过可比较的东西)时才使用基于树的集合实现(TreeMap、TreeSet)。一般来说,首先确定是否需要 List、Set 或 Map,然后查看常见的 ArrayList、HashMap 或 HashSet 是否足够。仅当他们不这样做时,才考虑使用基于树或基于 LinkedList 的集合实现。
-
我明白了。我想允许重复,所以我需要一个 ArrayList,但我也想要排序的值,所以我可以使用 Collections.sort(numbers) 吗?我将不得不查找 HashMap 和 HashSet。对不起,我确实说过我是新手!! :-)