我正在将一些代码从java转换为C#,我遇到了ArrayList<Integer> values = hashtable.get(h);
。问题引起 Hashtable get方法是否返回多个值?
答案 0 :(得分:1)
HashTable
返回一个值。如果该值恰好是Collection
类型的对象,那么该值将指向其他几个值。
例如
HashTable<String, ArrayList<Integer>> table = new HashTable<String, ArrayList<Integer>>();
// Populate it with values.
ArrayList<Integer> value = table.get("KEY");
这怎么可能?
简单。 Java泛型。这是您在类中声明Generic type
的地方,并在运行时定义它的类型。例如:
public class Test<T>
{
private T instance;
public Test(T instance)
{
this.instance = instance;
}
}
这意味着您可以以任何方式声明此类。
Test<String> test = new Test<String>();
Test<Integer> test2 = new Test<Integer>();
instance
的类型将是您声明的任何类型。
由于T
默认为Object
,因此您甚至可以在其中添加Collection
。
Test<ArrayList<String>> test3 = new Test<ArrayList<String>>();
答案 1 :(得分:0)
ArrayList本身就是一个值(一个arraylist)
HashTable<something, ArrayList<Integer>> hashtable = new HashTable<something, ArrayList<Integer>>();
所以它会将“某事”映射到整数的arraylist(即列表)
答案 2 :(得分:0)
get() method
的返回类型为Object
。所以这是一个Object
。但是Java中的类型可以是List
或任何Class
。
所以返回的Object
完全取决于你之前插入的内容。
答案 3 :(得分:0)
如果您希望为一个密钥使用多个值Guava
=&gt; Multimap
文档:
http://guava-libraries.googlecode.com/svn-history/r13/trunk/javadoc/com/google/common/collect/Multimap.html
答案 4 :(得分:0)
如果您将该列表放在地图中(在某个键下),它只会返回一个值列表。
Map<String, List<Object>> map = new HashMap<>();
... // init map
List<Object> list = map.get(KEY);
但
Map<String, Object> map = new HashMap<>();
map.put(KEY, obj1);
map.put(KEY, obj2);
Object obj = map.get(KEY);