如何比较java中相同泛型类型的两个值?
我有这个任务,所以我不是在寻找答案,但我只是想了解如何使用equals方法在Java中比较相同泛型类型的两个变量。我在stackoverflow中搜索了一些答案,但我认为只有使用compareTo方法才能找到您的类扩展Comparable的地方如何比较java中相同泛型类型的两个值?,java,generics,nodes,Java,Generics,Nodes,我有这个任务,所以我不是在寻找答案,但我只是想了解如何使用equals方法在Java中比较相同泛型类型的两个变量。我在stackoverflow中搜索了一些答案,但我认为只有使用compareTo方法才能找到您的类扩展Comparable的地方 package Maillon; import java.util.ArrayList; public class ListeAssociativeChainee<K, E> implements IListeAssociative &l
package Maillon;
import java.util.ArrayList;
public class ListeAssociativeChainee<K, E> implements IListeAssociative <C, E> {
private Node<K> keys;
private Node<Node<E>> elements;
private int nbrKeys;
public ListeAssociativeChainee () {
keys = new Node<>(null);
elements = new Node<>(null);
nbrKeys = 0;
}
}
但是,我还有另一个重载方法,如下所示:
public boolean supprimer(K key, int index) {
/*****/
}
这表示它在使用键和参数中给定的索引点指定的索引处删除一个元素
现在,假设我创建了一个关联列表,如下所示:
IListAssociative<String, Integer> testList = new ListAssociativeChainee();
我想使用delete方法
testList.supprimer(K key, E element);
我要说:
testList.supprimer("key3", 23);
相反,它会打电话
testList.supprimer(K key, int index);
这是因为根据我的理解,我使用的是int,而不是整数
现在说我这样做:
testList.supprimer("key3", new Integer(23));
它会打电话的
testList.supprimer(K key, E element);
但将查找包含23的整数类型的值
但是,在这种情况下,我的方法elementExists()
将始终返回false
有没有关于我怎么做的建议
编辑:
这是我的元素exists()
私有布尔元素existe(节点ListElements,E元素)
{
节点m=列表元素;
节点tmp=m.info();
布尔存在=假;
while(tmp!=null&&tmp.info()!=element){
tmp=tmp.next();
}
if(tmp!=null&&tmp.info()=element){
存在=真实;
}
退出;
}
我知道我这里的问题是我用
==
来比较和int和整数,这是错误的,但我不确定如何实现equals()
方法来比较当您的代码提供了两个delete之类的模糊方法时,最好的解决方案总是重命名方法本身。将其重命名为supprimerParIdx(Key,int)
,而不是supprimer(Key,int)
您还可以检查对象的实例,以确保它不是整数
:
if (element instanceof Integer) {
throw new RuntimeException("Integers are forbidden by my law!");
}
或者取消装箱并调用另一个方法,而不是异常
this(key, element.intValue());
当然,这里到处都很脏
旁注:
newinteger(23)
:永远不要这样做,而是使用Integer.valueOf(23)
,大多数装箱原语也是如此。通常需要E元素
来实现equals()
,当元素实际上相等时,它返回true
。请注意,Integer
已执行此操作。如果我的列表包含int类型的值
。我不明白这一点。您不能有一个列表
。是的,正如Paul指出的,您没有选择将int
用于Java泛型。无论您喜欢与否,您都可以获得自动装箱和Integer
。所以你所有的元素都是整数
,你只需要把它们解装箱成整数
。是的,你是对的,我实际上没有想到每个整数实际上都是解装箱整数,谢谢你的澄清。但我仍然不明白如何实现一个相同的方法来解决这个问题。我在这里添加了elementExists()
代码。@JoopEggen(1)我不能,因为这是一项作业--我必须遵循老师给我们的社交界面。。。(2) 据我所知,我无法实现可比较的接口,所以我必须找到另一种方法..我喜欢这个答案。我尝试了Integer.valueOf(23)
,现在效果好多了。稍后我将阅读它为什么会工作,但我很确定这与它不实例化Integer类型的对象有关,但在instanceof
的情况下,这是一个好主意,我确实想到了它,但我也认为可能有一种更简单的方法使用equals方法。否则我会和你一起去设想这个解决方案对你有效,别忘了投票并接受:)仍然没有达到15个代表投票,尽管哈哈哈。谢谢
private boolean elementExiste(Node<Node<E>> listeElements, E element)
{
Node<Node<E>> m = listeElements;
Node<E> tmp = m.info();
boolean existe = false;
while(tmp != null && tmp.info() != element) {
tmp = tmp.next();
}
if(tmp != null && tmp.info() == element) {
existe = true;
}
return existe;
}
if (element instanceof Integer) {
throw new RuntimeException("Integers are forbidden by my law!");
}
this(key, element.intValue());