【问题标题】:Removing last n elements from arrayList in Java [duplicate]从Java中的arrayList中删除最后n个元素[重复]
【发布时间】:2015-01-25 04:13:25
【问题描述】:

例子:

list1 = [10,20,30,40,50] 大小 = 5

根据 list1=5 的大小,我需要从 list2 中删除最后 5 个元素
list2 = [11,23,32,12,21,21]

输出 = [11]

因此,如果 list1 的大小为 n,我需要从列表 2 中删除最后 n 个元素吗?
实现这一目标的有效方法是什么?

【问题讨论】:

  • 您要更改现有列表,还是要使用 list2 中的第一个 x 元素创建新列表,其中 x=list2.size() - list1.size()?

标签: java arraylist


【解决方案1】:

您可以考虑使用 ArrayList 的 subList(...) 方法。

【讨论】:

    【解决方案2】:

    你可以创建一个while-loop,像这样:

     List yourList = ...; // Your list
     int removed = 0; // Setup the variable for removal counting
    
     while (removed < Math.min(secondList.size(), 5)) { // While we still haven't removed 5 entries OR second list size
       yourList.remove(yourList.size() - 1); // Remove the last entry of the list
       removed++; // Increases 'removed' count
     }
    

    【讨论】:

    • 这会起作用,但是如果 list1 有 5 个元素并且 list2(必须从中删除元素)的大小为 2 怎么办。我还需要跟踪 list2 的大小
    • 其实是countup ;)
    【解决方案3】:

    由于我们应该开始删除的第一个元素的N = list1.length() 索引可以计算为

    /*
      list1:       3, 4, 5, 6 (length=4)
      list2: a, b, c, d, e, f (length=6)
                   ^- element from which we start deleting, its index = 2 (6-4)
    */
    
    int indexOfFirstElementToRemove = list2.size() - list1.size();
    

    注意:我们不知道 list1 是否总是小于 list2。如果不是,则 indexOfFirstElementToRemove 将为负数或 0。在这种情况下,我们需要从 list2 中删除所有元素,因此调用 list2.clear() 就足够了。

    要在迭代时删除元素,我们使用 Iterator 或 ListIterator(如果可用)。要从指定的索引开始迭代,我们可以使用

    ListIterator<ElementType> iterator = listOfElements.listIterator(firstElementIndex);
    

    所以我们的最终解决方案可能如下所示:

    List<Integer> list1 = Stream.of(2, 3, 4, 5).collect(Collectors.toList());
    List<Integer> list2 = Stream.of(0, 1, 2, 3, 4, 5).collect(Collectors.toList());
    
    int indexOfFirstElementToRemove = list2.size() - list1.size();
    
    if (indexOfFirstElementToRemove > 0) {
    
        ListIterator<Integer> iterator = list2.listIterator(indexOfFirstElementToRemove);
    
        while (iterator.hasNext()) {
            iterator.next();
            iterator.remove();
        }
    
    } else {//indexOfFirstElementToRemove<=0 so we need to remove all elements from list2
        list2.clear();
    }
    System.out.println(list2); //Output: [0, 1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-19
      • 2018-12-03
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 2012-02-25
      • 1970-01-01
      • 2022-01-17
      相关资源
      最近更新 更多