【问题标题】:Insert removed element in generic list在通用列表中插入已删除的元素
【发布时间】:2020-02-17 16:16:30
【问题描述】:

我想从ArrayList 的末尾删除删除元素并将其设置在i 的位置。我不关心元素的顺序,但我希望这个操作是 O(1)。

我的代码:

    private void removeElement(int i, List<? extends MyClass> objects) {
        if (i >= objects.size() - 1) {
            objects.remove(objects.size() - 1);
        } else {
            objects.set(i, objects.remove(objects.size() - 1));
        }
    }

通过这样做,我将从我的 ArrayList 中删除 i 索引处的对象,时间复杂度为 O(1)。

我的问题是 Java 不允许我在 i 位置设置已删除的元素。我得到:

第二个参数类型错误。成立 '?扩展MyClass',需要'?扩展 MyClass'。

我知道“生产者扩展消费者超级”规则。我知道 ? extends MyClass 对象可能与确切的 ? extends MyClass List 泛型类型不同。但是不应该允许插入从同一个列表中检索到的元素吗?

【问题讨论】:

  • 它不知道该项目已从同一列表中删除。 Java 首先计算所有参数,然后调用方法。
  • 您真的需要一个上限通配符列表,还是可以摆脱 ?延伸?

标签: java generics collections


【解决方案1】:

去掉通配符;而且我什至认为您不需要绑定:

private void <T> removeElement(int i, List<T> objects) {

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 2010-12-28
    相关资源
    最近更新 更多