你如何比较java中相同泛型类型的两个值?

时间:2015-11-20 21:12:26

标签: java generics nodes

我有这个任务,所以我不是在寻找答案,但我只是想了解基本上如何使用equals方法比较Java中相同泛型类型的两个变量。我已经搜索了stackoverflow以获得一些答案,但只能使用compareTo方法找到你的类扩展Comparable我认为。

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;
    }
}

目前的情况如下: Visual representation of what my work should do

我想做什么: And here's what I'm trying to do

当我尝试通过关联列表中查找元素并使用参数中给出的键和元素来删除元素时,我的问题就出现了:

public boolean supprimer(K key, E element) {
    /*****/
}

但是,我还有另一个重载方法,如下所示:

public boolean supprimer(K key, int index) {
    /*****/
}

这个说它删除了使用键指定的索引处的元素和参数中给出的索引点。

现在说我创建一个关联列表如下:

IListAssociative<String, Integer> testList = new ListAssociativeChainee();

其中IListAssocivative是在ListAssociativeChainee中实现的接口

现在,如果我的列表包含 int 类型的值,如下所示:

key1 -> [1, 2, 4, 5, 6]
key2 -> [5, 6, 8]
key3 -> [0, 7, 23]

我想使用删除方法

testList.supprimer(K key, E element); 

我说:

testList.supprimer("key3", 23);
而不是它会打电话

testList.supprimer(K key, int index);  

那是因为我使用的是 int 而不是 Integer

现在说我这样做:

testList.supprimer("key3", new Integer(23));

它会调用

testList.supprimer(K key, E element);     

但会查找包含23的整数类型的值。

但是,在这种情况下,我的方法elementExists()将始终返回false。

关于我如何做到这一点的任何提示?

编辑:

这是我的elementExists()

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;
    }

我知道我的问题是我使用==来比较和 int 以及整数这是错误的但我不是确定如何实施equals()方法进行比较

1 个答案:

答案 0 :(得分:1)

当您的代码提供类似于两次删除的模糊方法时,最佳解决方案始终是自行重命名方法。而不是supprimer(Key, int),而是将其重命名为supprimerParIdx(Key, int)

您还可以检查instance of您的对象,确保它不是Integer

if (element instanceof Integer) {
    throw new RuntimeException("Integers are forbidden by my law!");
}

或代替Exception,取消框并调用其他方法

this(key, element.intValue());

当然,这一切都很脏。

旁注:

new Integer(23):永远不要这样做,使用Integer.valueOf(23)代替大多数Boxed原语。