java - 在通用列表中插入删除的元素

标签 java generics collections

我想从ArrayList末尾删除remove元素并将其设置在位置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));
        }
    }

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

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

Wrong 2nd argument type. Found '? extends MyClass', required '? extends MyClass'.

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

最佳答案

去掉通配符;我什至认为你不需要界限:

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

关于java - 在通用列表中插入删除的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60266452/

相关文章:

java - 如何清理在 servlet 中创建并返回给用户的临时文件?

java - 在 Java 中解码 JSON 格式

java - 在多个类中使用相同的通配符类型

django - 将非默认管理器与 GenericForeignKey() 结合使用

java - 将子类对象列表传递给以父类(super class)列表作为参数的方法

java - 如何将一个列表分配给另一个列表?

java - 为什么即使添加 setJMenubar() 方法后,Jmenubar 在我的 Jframe 中也不可见?

swift - 如何解决 Swift 中的 "Generic parameter ' T' 无法推断”

php - 如何在不重新索引的情况下将项目添加到 laravel 列表集合中?

java - 如何解决在Android上运行appium驱动程序的问题