我不确定应该用什么数据结构来解决它, 我有一个类别列表和与它们关联的值列表如下:
Categories Values
Smart **person1**,person2
Handsome person3,person6,**person1**
Hard-Working person7,person9
例如,person1是Smart and Handsome,因为他同时属于帅气和智能两类。 (值(人)可以在许多类别中)和person2是智能但不是英俊。
人物对象有名称,年龄和性别,例如人1是
John 43 Male
我想知道如何设计它,我在想一个二维数组,但这不是一个好主意,因为我会有一些空余的地方
Cat1 v3,v6 Spare Spare
Cat2 v10 Spare Spare Spare
cat4 v6,v7,v8,v9
我认为最好的是有一个列表,但不确定如何找出哪个类别或类别的值(如上面示例中与v1和cat4相关的V6)< / p>
V3 v6 v7 v8 v9 v10
答案 0 :(得分:3)
您可以使用类似
的内容 Map<Category, List<Person>>
由于Map
应该提供O(1)访问权限,因此您希望您的密钥是您用来查找最多的密钥(在您的情况下,从我收集的内容中分类)。所以,如果你有
Map<Category, List<Person>> categoryLookup = new HashMap<Category, ArrayList<Person>>();
你可以做到
List<Person> values = myCategoryLookup.get(someCategory);
然后迭代值。对同一个值的引用可以在多个列表中 - 这不是问题。
对于下面的Yameo,如果你想获得一个人的类别,你可以
Person
维护其类别列表Map<Person, List<Category>>
这些解决方案的替代方法是在Category
和Person
类中设置关系。例如,Person
将List<Category>
作为其类属性之一,同样Category
将List<Person>
作为其类属性之一。但我觉得这更像是一个数据结构问题。如果您有一个包含实际数据的数据库并且将使用ORM工具将数据映射到Java类,那么您可能会这样做。
答案 1 :(得分:1)
在数据库中,您将使用junction table。另见many to many。根据您的需要,您可以使用enum
作为类别,使用MultiMap<Person, Category>
作为存储。