在列表中获取新添加项的索引?

6
我希望能够获取新添加元素在arraylist中的索引。例如:
List listA = new ArrayList();

// Lots of code adding and removing things from `listA`, imagine `listA` now 
// contains approx 10,000 records

listA.add("element 0");

如何找出新添加项的索引?

我认为也许需要使用不同的数据结构,但是想不到应该用什么。


出于好奇,您为什么需要知道这个索引值?这让我想到您可能正在错误的方向上做某些事情... - Duncan Jones
7个回答

7
添加到列表的第一个元素的索引为0。
添加的最后一个元素将具有索引listA.size()-1
但是,如果您从列表中删除元素,则某些索引(高于已删除元素的索引元素的索引)将发生更改。例如,如果您删除第n个元素,则以前的(n+1)'th元素将成为第n个元素。

感谢talex的评论。我忘记了indexOf(),它返回所提供元素的索引(如果在列表中找到该元素)。但是,这需要线性搜索时间。

如果您希望将列表的索引视为用于查找存储在列表中的值的键,则最好使用HashMap<Integer,String>


1
你可以使用 indexOf 方法。 - talex
好的,我将从列表中删除元素,这可能会成为一个问题。我可以选择不删除元素,但那似乎是糟糕的编码方式...是否有其他数据结构可以在删除项目的同时保留索引以便访问这些项目? - Matthew Smith
请注意,如果滥用set(),这将无法正常工作。 - blgt
哈希表似乎是未来的方向。谢谢您的帮助。 - Matthew Smith

2
索引将是size(),在添加之前获取它:before
List listA = new ArrayList();
...
int index = listA.size();

listA.add("element 0"); // "element 0" will be at the "index" item

1
您可以使用 indexOf 方法检索列表中任何元素的索引:
List<String> listA = new ArrayList<String>();

//Lots of code adding and removing things from listA, imagine listA now contains approx 10,000 records

String str = "element 0"
listA.add(str);

int index = listA.indexOf(str)

如果您只关心最后一个元素的索引,列表的javadoc说:“添加(E e)将指定的元素追加到此列表的末尾(可选操作)。”,因此您可以使用以下代码:
List<String> listA = new ArrayList<String>();

//Lots of code adding and removing things from listA, imagine listA now contains approx 10,000 records

listA.add("element 0");

int index = listA.size()-1 //minus 1 because index start at 0

由于您似乎关心通过索引(标识符?)访问元素,因此应该看一下Map:

Map<int, String> mymap = new HashMap<int, String>();
mymap.add(1, "element1");
mymap.add(2, "element2");
mymap.add(3, "element3");

mymap.get(3);//return "element3"

0
如果您使用 add(element),则顺序将保持不变,因此列表中的最后一个元素将是最近添加的元素。 因此,您可以使用 listA.get(listA.size-1); 如果您使用 add(index,element),情况将不同,因为顺序未得到保留。 请参阅此处相关问题 如何获取ArrayList的最后一个值

0

List的索引从0开始,到size()-1结束。

如果你计算元素数量,它将与size()-1相同。

例如,如果您的列表包含100条记录,则最后一个元素的索引将是size()-1,即99。

List listA = new ArrayList();
int lastIndex=listA.size()-1;

0

与其他建议不同,size()返回List的总大小,由于List索引从零开始,所以size() - 1给出了列表中最后一个元素的索引。

不要将最后一个元素与您刚添加的元素混淆。只要我们使用add()方法,新的元素就会附加到列表末尾,但列表还有另外一种带有索引参数的add方法。使用此方法,您可以在列表中的任何位置添加新元素。在这种情况下,size() - 1将不能给出您最新添加的元素的索引。


0
List listA = new ArrayList();

String a = "element 0";

listA.add(a);

int index = listA.indexOf(a);

就是这样


如果listA包含大量项目,则您的解决方案可能需要耗费很长时间;另一个问题是,如果ListA包含相同的项目。 - Dmitry Bychenko
我一直认为ArrayList是用于快速检索值的。我不知道它需要多大才会变慢... - Lucas
@Lucas 实现 indexOf 将不得不遍历整个列表,寻找匹配项。与其他查找索引的方法相比,这将会很慢。 - Duncan Jones

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接