gpt4 book ai didi

java - 如何子类化 ArrayList,并要求 必须扩展 Comparable

转载 作者:行者123 更新时间:2023-12-01 18:40:23 25 4
gpt4 key购买 nike

我认为我想要做的事情很清楚,但我不是泛型专家。

import java.util.ArrayList;
public class MinHeap<E extends Comparable> extends ArrayList<E> {
/* A simple wrapper around a List to make it a binary min-heap. */
public MinHeap() {
super();
}

@Override
public boolean add(E e) {
super.add(e);
int i = this.size() - 1;
int parent;

while (i > 0) {
parent = this.getParentIndex(i);

if (this.get(i).compareTo(this.get(parent)) < 0) {
this.swap(i, parent);
} else {
break;
}
}
return true;
}

public int getParentIndex(int i) {
if (i % 2 == 1) {
return (i - 1) / 2;
} else {
return (i - 2) / 2;
}
}

private void swap(int i, int j) {
E temp = this.get(i);
this.set(i, this.get(j));
this.set(j, temp);
}
}

我在编译时收到警告:

MinHeap.java:21: warning: [unchecked] unchecked call to compareTo(T) as a member of the raw type Comparable
if (this.get(i).compareTo(this.get(parent)) < 0) {
^
where T is a type-variable:
T extends Object declared in interface Comparable
1 warning

我不明白。我错过了什么?

我最初认为这与需要检查 this.get(i) 和 this.get(parent) 是否是 Comparable 的实例有关......所以我添加了一个检查:

if (!(this.get(i) instanceof Comparable) ||
!(this.get(parent) instanceof Comparable)) {
return false;
}

但这给出了同样的警告。

最佳答案

public class MinHeap<E extends Comparable> extends ArrayList<E> 

应该是

public class MinHeap<E extends Comparable<E>> extends ArrayList<E> 

因为Comparable本身就是一个通用接口(interface)。

关于java - 如何子类化 ArrayList,并要求 <E> 必须扩展 Comparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20158428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com