【问题标题】:Print a set collection打印集合
【发布时间】:2014-04-23 11:36:12
【问题描述】:

我现在正在研究集合,从我学到的知识中我看到 Set 是一种不允许重复元素的集合。 好的,我创建了一个类,它将三个 int 数字添加到集合中。看起来没问题,但问题是:我如何打印这个集合?我知道我可以重写 String 方法,但由于我的元素是整数类型,我怎么能这样做? 我的预期输出是: 2,3,2 4,5,6

代码(加号)

public class adaugareNumere {
int c=0;
int f=0;
int r=0;

adaugareNumere(int c, int f, int r){
this.c=c;
this.f=f;
this.r=r;
}


}

主类:

import java.util.*;
public class Executare {



public static void main(String[] args) {
    adaugareNumere primulRand=new adaugareNumere(2,3,2);
    adaugareNumere alDoileaRand=new adaugareNumere(2,3,2);
    adaugareNumere alTreileaRand=new adaugareNumere(4,5,6);
    Set<adaugareNumere> lista=new HashSet<adaugareNumere>();
    lista.add(primulRand);
    lista.add(alDoileaRand);
    lista.add(alTreileaRand);
    System.out.println("Elementele listei: "+Arrays.asList(lista.toString()));

}

}

【问题讨论】:

  • 请尊重命名约定:类以大写字母开头。并正确缩进你的代码。
  • 别忘了覆盖equals和hashcode。

标签: java collections set


【解决方案1】:

您需要覆盖 adaugareNumere 类中的 toString() 方法。

例子:

@Override
public String toString() {
    return "adaugareNumere [c=" + c + ", f=" + f + ", r=" + r + "]";
}

只需在 SOP 声明中列出清单。

System.out.println("Elementele listei: " + lista); // No need for `Arrays.asList()` or `toString()`.

【讨论】:

  • 好的,我教过我可以在另一堂课中重写此方法,但我在返回声明中犯了错误。所以这是一个很好的解决方案。谢谢你。评分
  • 还有一个问题:为什么重复的元素(2,3,2)被打印了两次?他们不应该只在系列中出现一次吗?
  • @user2902894 您需要覆盖哈希码和等号。请阅读 HashSet 的文档
  • @user2902894 - 您还需要使用您自己的逻辑覆盖该类中的equals() 和hashCode() 方法,这将告诉Set 2 个实例的基础是什么阶级应该被平等对待。 Object 提供的默认方法不足以确定这一点。
【解决方案2】:

从 Set 中检索 Value。可以使用迭代器:

Iterator itr    =   lista.iterator();
while(itr.hasNext()){
        System.out.print(itr.next()+",");
    }

但是由于您试图将 Object 放入 Set 中,因此不允许重复的对象,但值可以重复

【讨论】:

    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 2019-09-08
    • 2017-12-19
    • 2018-09-09
    • 1970-01-01
    相关资源
    最近更新 更多