相关疑难解决方法(0)

Java HashSet允许欺骗; 问题可比吗?

我有一个类"Accumulator",它实现了Comparable compareTo方法,我试图将这些对象放入HashSet中.

当我向HashSet添加()时,我在调试器中的compareTo方法中看不到任何活动,无论我在哪里设置断点.另外,当我完成add()时,我在Set中看到了几个重复项.

在这里,我搞砸了什么; 为什么不比较,因此允许欺骗?

谢谢,
IVR复仇者

java set comparable

9
推荐指数
3
解决办法
7628
查看次数

如何去除HashSet中的重复项?

在下面的代码中,我在哈希集中添加了 5 个具有相同数据的对象,我想消除具有重复数据的对象并打印不同的对象数据。

public static void main(String[] args) {
Employee emp1 = new Employee(1,"sandhiya","cse",22);
Employee emp2 = new Employee(1,"sandhiya","cse",22);
Employee emp3 = new Employee(1,"sandhiya","cse",22);
Employee emp4 = new Employee(1,"sandhiya","cse",22);
Employee emp5 = new Employee(1,"sandhiya","cse",22);
HashSet<Employee> emps = new HashSet<Employee>();
emps.add(emp1);
emps.add(emp2);
emps.add(emp3);
emps.add(emp4);
emps.add(emp5);
for(Employee e: emps){
    System.out.println(e.id + " "+e.name+" "+e.department+ " "+e.age);
}


}
Run Code Online (Sandbox Code Playgroud)

java hashset

3
推荐指数
1
解决办法
2万
查看次数

HashSet添加重复的对象

我有一个HashSet,它在Graph中存储了一些边.每个Edge都有两个节点.

在图表未定向的情况下,添加副本应该失败:

Edge a = new Edge(new Node("aa"), new Node("bb"));
Edge duplicate = new Edge(new Node("aa"), new Node("bb"));
Run Code Online (Sandbox Code Playgroud)

但是在下面的例子中它起作用:

System.out.println(a.equals(duplicate));

Set<Edge> sete = new HashSet<Edge>();
System.out.println(sete.contains(a));
System.out.println(sete.add(a));
System.out.println(sete.contains(duplicate));
System.out.println(sete.add(duplicate));

Output:
true

false
true
false
true
Run Code Online (Sandbox Code Playgroud)

编辑:好的,现在我添加了一个hashCode方法,适用于定向边.有人可以帮我计算无向边的哈希吗?

public class Edge {
    private Node first, second;

    @Override
    public /boolean equals(Object ob) {
        if (ob instanceof Edge) {
            Edge edge = (Edge) ob;
            if (first.equals(edge.first)
                    && second.equals(edge.second)
                    || first.equals(edge.second)
                    && second.equals(edge.first))
                return true;
        }
        return false;
   }


    @Override
    public int hashCode() {
        int …
Run Code Online (Sandbox Code Playgroud)

java set hashcode

1
推荐指数
1
解决办法
8281
查看次数

为什么我的重复条目没有用 HashSet 过滤掉,但是用 TreeSet 过滤掉了?

我在这里尝试了一点。但是我不明白为什么 TreeSet 可以在这里过滤掉重复的条目,而 HashSet 不能。


public class DataClass implements Comparable<DataClass> {
    private final String data;

    public DataClass(String data) {
        this.data = data;
    }

    @Override
    public boolean equals(Object other) {
        if (other == null || other.getClass() != this.getClass()) return false;
        DataClass dc = (DataClass) other;
        return this.data.length() == dc.data.length();
    }

    @Override
    public int compareTo(DataClass dc) {
        return Integer.compare(this.data.length(), dc.data.length());
    }

    @Override
    public String toString() {
        return data;
    }
}

Run Code Online (Sandbox Code Playgroud)

这是我的主要方法:

DataClass[] data = new DataClass[4];
        data[0] = new DataClass("Hans");
        data[1] = …
Run Code Online (Sandbox Code Playgroud)

java collections hashset treeset

0
推荐指数
1
解决办法
67
查看次数

标签 统计

java ×4

hashset ×2

set ×2

collections ×1

comparable ×1

hashcode ×1

treeset ×1