【问题标题】:Get index of newly added item in a list?获取列表中新添加项目的索引?
【发布时间】:2014-10-19 20:44:50
【问题描述】:

我想将新添加的元素的索引放入数组列表中。例如

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");

如何找到新增项目的索引?

我认为也许,我需要一个不同的数据结构,但想不出要使用什么。

【问题讨论】:

  • 出于兴趣,为什么需要知道这个索引值?它向我暗示你可能做错了事......

标签: java list arraylist


【解决方案1】:

添加到列表中的第一个元素的索引为 0。
添加的最后一个元素将具有索引listA.size()-1
但是,您应该注意,如果您从列表中删除元素,一些索引(索引高于被删除元素的元素的索引)将会改变。例如,如果您删除第 n 个元素,则之前的第 (n+1) 个元素将成为第 n 个元素。

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

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

【讨论】:

  • 你可以使用indexOf方法。
  • 好的,我将从列表中删除元素,所以这将是一个问题。我只是懒得删除元素,但这似乎是不好的编码......是否有任何其他数据结构可以删除项目,同时保留索引以访问项目?
  • 另外请记住,如果(ab)使用set(),这将不起作用
  • Hashmap 似乎是前进的方向。感谢您的帮助。
【解决方案2】:

您可以使用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 会说:“ add(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"

【讨论】:

    【解决方案3】:

    与其他建议不同....size() 给出了List 的总大小,并且由于List 索引是从零开始的,因此size() - 1 给出了他列表中最后一个元素的索引。

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

    【讨论】:

      【解决方案4】:

      List 的索引以 0 开头并以 size()-1 结尾。

      如果计算元素个数,则与size()-1 相同。

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

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

      【讨论】:

        【解决方案5】:

        如果您使用add(element),则会保留顺序,因此列表中的最后一个元素将是最近添加的元素。 所以你可以使用listA.get(listA.size-1);

        如果您使用的是add(index,element),则不会出现这种情况,因为订单不会被保留。

        相关问题请参见此处How to get the last value of an ArrayList

        【讨论】:

          【解决方案6】:
          List listA = new ArrayList();
          
          String a = "element 0";
          
          listA.add(a);
          
          int index = listA.indexOf(a);
          

          你来了

          【讨论】:

          • 如果 listA 包含很多项目,您的解决方案可能是 time cousuming;另一个问题是,如果 ListA 包含相同的项目
          • 好吧,我一直认为 ArrayList 是为了快速检索值。我不知道它需要多大才能让它变慢......
          • @Lucas indexOf 的实现必须遍历整个列表,寻找匹配项。与其他查找索引的方法相比,这会很慢。
          【解决方案7】:

          索引将是size(),只需获取它之前添加:

          List listA = new ArrayList();
          ...
          int index = listA.size();
          
          listA.add("element 0"); // "element 0" will be at the "index" item
          

          【讨论】:

            猜你喜欢
            • 2011-10-05
            • 1970-01-01
            • 1970-01-01
            • 2013-06-15
            • 1970-01-01
            • 2013-04-29
            • 2019-01-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多