我们可以使用索引类数组索引来访问List <t>?</t>

时间:2011-03-26 09:16:49

标签: java

我想知道我们是否可以使用索引来访问List

例如:

List<Integer> list; 

list[5]     //blah....

7 个答案:

答案 0 :(得分:46)

由于[]是运算符而java不支持运算符重载,因此无法将其与List一起使用。相反,您必须使用set(int index, T value)get(int index)方法,这些方法可能很冗长但提供完全相同的功能。

答案 1 :(得分:24)

List.get(int)允许您使用索引访问元素。

答案 2 :(得分:6)

您可以使用get方法使用索引访问List元素:

  

获取

     

public Object get(int index)

     

返回   指定位置的元素   在此列表中。

     

参数:index -   要返回的元素的索引。

     

返回:   指定位置的元素   在此列表中。

     

抛出:   IndexOutOfBoundsException - 如果是   index超出范围(索引&lt; 0 ||   index&gt; = size())。

请记住,列表中的索引是基于0的。

答案 3 :(得分:5)

这里有很多好的答案,但我只想指出list.get(i)list[i]相同,只有列表是用数组实现的(即ArrayList)。如果它是LinkedList,您实际上并不是使用get编制索引,而是迭代。

因此,如果将get()与接口类型List一起使用,尤其是在循环中,则应检查其实现方式,因为带有ArrayList的get()为O(1),而get()为LinkedList是O(n)(慢得多)。

答案 4 :(得分:3)

使用get(int)的替代方法是使用toArray()

创建数组
List<T> list = ...

Object[] array = list.toArray();

如果T 已知toArray(T[])可用于返回T[]而不是Object[]
如果确实需要一个数组(大量访问),toArray的使用只有意义而不是get

答案 5 :(得分:2)

不,你不能用Java做到这一点。

答案 6 :(得分:2)

不,你被限制在List.get (i)

括号[]是在语法级别定义的,而不是方法名称,因此您无法覆盖它们。它们仅用于阵列。

如果您希望迁移到Scala(一种更现代的JVM语言),您将找到对数组和列表的统一访问,但两者都使用()个括号。