【问题标题】:Java - Set capable of referencing instances of a different classJava - Set 能够引用不同类的实例
【发布时间】:2016-05-03 10:31:45
【问题描述】:

谁能帮我处理这个java代码? 我有两个类,需要创建一个 set 来存储另一个类的实例。这是我设法“提交”的样本:)
A 类

public Class Rabbit { 

    private String age; 

    //constructor for instance of Rabbit <br>
    public Rabbit(String rabAge) {
        super();
        this.age = rabAge;
    }

现在是 B 类:

public class ManyRabbits {
private Set <String>  setOfRabbits;

现在这个方法应该创建一个新的 Rabbit 实例并将其添加到由变量 setOfRabbits 表示的集合中

public void addRabbit (String age)` {

    //and I don't know what should go next...something like: `
    Rabbit r1 = new Rabbit("10");` <br>
    setOfRabbits.add(r1); 

}

【问题讨论】:

  • 应该是 Set 而不是 Set
  • 您还需要覆盖Rabbit 中的equalshashCode(除非您希望通过身份来完成重复数据删除)。

标签: java class set instances


【解决方案1】:

您需要更改设置的 declamation :

private Set<Rabbit> setOfRabbits;

您还需要覆盖这两种方法,以免在集合中插入两次相同的对象。

@Override
public int hashCode() {
    // Your own implementation 
    return ...;
}

@Override
public boolean equals(Object o) {
    // Your own implementation 
    return ...;
}

【讨论】:

  • 建议hashCodeequals 的这些实现具有误导性,因为如果您没有覆盖这些方法,此类的行为将相同。请提出有用的实施方案。
【解决方案2】:

你的ManyRabbits 应该是这样的

public class ManyRabbits
{
    private Set<Rabbit>  setOfRabbits = new HashSet<Rabbit>();

    public void addRabbit (String age) 
    { 
       Rabbit r1 = new Rabbit(age); 
       setOfRabbits.add(r1);
    }

}

【讨论】:

    【解决方案3】:
    public class Rabbit { 
    
      private String age; 
    
      //constructor for instance of Rabbit   
      public Rabbit(String rabAge) {
        super();
        this.age = rabAge;
      }
    
      // more methods if necessary
    }
    

    ManyRabbits:

    public class ManyRabbits {
      private Set <Rabbit> setOfRabbits = new HashSet<>();
    
      public void addRabbit (String age) { 
        Rabbit r1 = new Rabbit(age); 
        setOfRabbits.add(r1);
      }
    
      // more methods if necessary
    }
    

    通过调用类似的东西来使用它

    ManyRabbits manyRabbits = new ManyRabbits();
    manyRabbits.addRabbit("10");
    manyRabbits.addRabbit("20");
    manyRabbits.addRabbit("30");
    

    【讨论】:

    • 非常感谢大家。当我使用 addRabbit 并创建 Rabbit r1 时没问题,但是如果我想创建另一只兔子怎么办,它会覆盖第一个吗?我需要能够向集合中添加更多兔子。
    【解决方案4】:

    说:

    Set<Rabbit> setOfRabbits = new HashSet<>();
    
    setOfRabbits.add(new Rabbit());
    

    当 Set 将跟踪未知数量的对象时,我通常会尝试使用未命名的实例进行实例化。这对于添加到监听器非常有用,这样您就可以在每次用户点击时添加一个新的 Rabbit。

    通过这种方式,您可以添加任意数量的 Rabbit 对象。试试:

    for(i = 0; i < 10; i++) {
        setOfRabbits.add(new Rabbit());
    }
    

    您可能会在旧版本的 Java 中看到这一点:

    Set<Rabbit> setOfRabbits = new HashSet<Rabbit>();
    

    但它不再需要

    【讨论】:

    • 但是 OP 想要一个 Set,而不是 List
    猜你喜欢
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多