<>在Java声明和实例化中的含义是什么?

时间:2011-11-20 20:25:57

标签: java

我是java的新手并且有一个问题

myBooks = new ArrayList<HashMap<String,Object>>();

什么是HashMap以及我们< >使用ArrayList {{1}}时的含义是什么?

4 个答案:

答案 0 :(得分:7)

HashMapArrayList都可以被视为PHP中的数组。 ArrayList由数字编制索引,HashMap是键值对的集合 - PHP不区分这两种情况。

这个特殊的声明说有一个ArrayList(数字索引数组),它的所有元素都是HashMap类型。对于每个HashMap,它是键/值对的集合,键的类型为String,值的类型为Object

答案 1 :(得分:6)

它表示Java中的泛型类型。例如,如果您使用ArrayList如下

myBooks = new ArrayList<String>();

表示存储在ArrayList myBook中的内容将是Java中可用的String类型。

在以下声明中

myBooks = new ArrayList<HashMap<String,Object>>();

ArrayList持有一个HasMap,键的类型为String,类型为Objects。


同样,您可以使用泛型类型CollectionListHashTable等,并且应始终与泛型类型一起使用,因为它们可以包含任何类型的值。

,例如

Collection<String> c=new ArrayList<String>();

List<String>list=new ArrayList<String>();

Hashtable<String, String> h = new Hashtable<String, String>();

你可以简单地定义它们而没有遗传类型如下。

Collection c=new ArrayList();

List list=new ArrayList();

Hashtable h=new Hashtable();

在这种情况下,编译器根本不会抱怨,但总是优先使用泛型。

答案 2 :(得分:4)

这是Java泛型的一个例子。

ListMapSet等数据结构可以容纳任何类型的对象。当您使用泛型时,您可以准确地告诉编译器数据结构所持有的对象类型。

在您的情况下,您有List MapsMapString个密钥和Object个值。

答案 3 :(得分:3)

以上所有答案都很棒。

此外,我想指出您还应该阅读Java Type Erasure以了解泛型的编译时和运行时行为之间的区别。

通过正确理解类型擦除,您将为自己节省很多痛苦。