Java中有“标记”集合吗?

时间:2011-09-29 14:18:52

标签: java collections

Java中是否有“标记”集合?为了澄清,我想基本上使用某种Object(例如String)对列表中的每个元素进行分类,这样我就可以通过我指定的标记引用列表中的不同对象,而不是Object类型或元素内容。

编辑:HashMap不起作用,因为列表中项目的顺序也被视为重要。我的理解是,当列表的顺序以某种方式起作用时,HashMap是不实用的。如果我在这件事上不正确,请务必纠正我。

10 个答案:

答案 0 :(得分:3)

您正在寻找Map。此数据结构将映射到

答案 1 :(得分:3)

如果Map中的每个键映射到一组对象,您将能够使用特定标记(键)轻松查找每个对象

答案 2 :(得分:3)

不,据我所知,标准Java库中没有“标记”集合。但您可以使用Map<Tag,Set<String>>标记字符串。

答案 3 :(得分:2)

您可以使用地图

Map<String, Object> = new HashMap<String, Object>(); 

您可以将String替换为您想要的任何内容。但是,您可能遇到的一个问题是,是否要使用相同的“标记”对多个对象进行分类。例如,“Cat”标记可能适用于多个唯一的cat对象,而hashMap只允许您使用“Cat”标记指向的一个Cat对象。如果这是你想要做的(一个标签指向多个对象),你需要将地图声明为:

Map<String, List<Object>> = new HashMap<String, List<Object>>(); 

这将创建一个HashMap,其中包含每个对象的列表,因此您可以将一个标记指向多个对象。

答案 4 :(得分:2)

如果您不限制JDK中的内容,请考虑使用Guava Multimaps。它们为集合图提供预先构建的支持。

答案 5 :(得分:1)

也许你需要Map

答案 6 :(得分:1)

这还不够详细。我们不知道是否: - 允许每个项目使用多个标签 - 每个标签允许多个项目

我将采用最广泛的解决方案,其中两个都是真的。 你需要的第一件事就是你的Tag类(我建议使用枚举)

public enum Tag {
    TAG1, TAG2, TAG3; // add your tags here
}

然后,您的收藏将是一个地图,其中关键是您的对象,以及每个对象的标记列表的值。

Map<Object, List<Tag>> items = new HashMap<Object, List<Tag>>();

当然,如果您想允许任何标记而不仅仅是已知标记,您可以将“Tag”替换为字符串。

根据你想要对你的收藏品做什么,你可能想要扭转它:

Map<Tag, List<Object>> = new HashMap<Tag, List<Object>>();

我建议您首先编写列出您的规格的测试用例(单元测试),并且您的集合的设计将从它们(TDD)中有机地显示。

答案 7 :(得分:1)

如果订单很重要,请使用LinkedHashMap

答案 8 :(得分:1)

See SortedMap和TreeMap

答案 9 :(得分:0)

听起来像你想要一个hashmap