2011-03-06 49 views
2

我希望创建的TreeMap一个实例,其键将String类型和值ArrayList <String> 类型:这里Multimapping和匿名值

Map<String, List<String>> directory = new TreeMap<String, List<String>>(); 
String[] names = {"Anne","Ben","Charles","Dawn","Edward"}; 

for (int i = 0; i < names.length; i++) { 
    directory.put(names[i], new ArrayList<String>()); 
} 

我的问题涉及到线以下代码5。传递一个匿名对象(在这种情况下由新的ArrayList()给出)作为put()方法的实际参数是否可接受/最佳实践?我对这个基本原理是,通过地图的性质,这些对象仍然可以通过例如以下达到:

directory.get("Anne"); 
+0

我不知道我理解你的问题。如果您希望Map中的列表不变,请使用Collections.immutableList(新的ArrayList ())代替第5行,作为put()的第二个参数。 – shams 2011-03-06 18:14:40

+0

oops它应该是Collections.unmodifiableList():) – shams 2011-03-06 18:36:04

回答

0

没有错的。我用它所有的时间。

0

在您的代码中,为每个这些名称创建一个新的ArrayList对象。这是你想要做的吗?无论是最佳实践取决于你想要做什么,最好的做法是存储例如这些人拥有的宠物名称(每个人的宠物名单)。

2

我看不出有什么问题。事实上,我甚至没有理由把这种事情称为“匿名”。您只需避免声明一个永远不会使用的变量(即对该对象的引用 - 您仍在创建对象)。

Java中没有这样的“匿名”对象。有匿名类,即没有名字的类。一个对象没有“名称”的概念。根据需要可以简单地引用一个或多个参考。

+0

我们可以说“每个对象都是匿名的”(可能除枚举值外),甚至。 – 2011-03-06 18:35:10

+0

谢谢MAK。创建时,这是否意味着无论我们是否为地图的值提供引用变量,对其值的引用都由地图的某种机制维护,因此可以始终通过Map.get(aKey)来实现? – 2011-03-06 19:06:45

+0

@helloRichie:是的。 – MAK 2011-03-07 03:12:10