我想知道我们是否可以使用索引来访问List
例如:
List<Integer> list;
list[5] //blah....
答案 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语言),您将找到对数组和列表的统一访问,但两者都使用()
个括号。