我正在使用树集将一些信号存储为树集中的对象,并且还想要更新对象如果再次出现相同的信号。到目前为止,我尝试了一些东西,但问题是当我尝试打印它时,我无法获得完整的对象。其次,我不知道是否有任何方法可以更新abject并将其保存回设置... 这是我的代码 信号类(Signal.java)
public class Signal implements Comparable<Signal>{
String source;
String name;
int occurance;
public void setSource(String source){
this.source = source;
}
public void setName(String name){
this.name = name;
}
public void setOccurance(int occurance){
this.occurance = occurance;
}
public String getSource(){
return this.source;
}
public String getName(){
return this.name;
}
public int getOccurnace(){
return this.occurance;
}
@Override
public int compareTo(Signal arg0) {
// TODO Auto-generated method stub
return 0;
}
}
我的主要课程
public class SortedSetTest {
public static void main(String[] args) {
// Create the sorted set
SortedSet<Signal> set = new TreeSet<Signal>();
//Create a Signal object for each new signal
Signal sig = new Signal();
sig.setSource("Source");
sig.setName("Signal Name");
sig.setOccurance(1);
// Add elements to the set
set.add(sig);
System.out.println(set);
以上版本将我显示为对象...如何将该集视为字符串?
// Iterating over the elements in the set
Iterator<Signal> it = set.iterator();
while (it.hasNext()){
我想打印每个对象
例如,取第一个对象并打印对象(信号)源,名称和出现等,直到设置到达为止。
}
}
}
答案 0 :(得分:1)
您正确打印该套装。
您还没有实现Signal.toString()
方法来按照您希望的方式表示Signal
对象。
关于更新TreeSet
中的对象:不得修改对象,以免更改compareTo
的输出。如果需要以这种方式更新,请将其删除(使用Set.remove(object)
,更新并重新添加。
也就是说,您的compareTo()
方法始终返回0.如果您希望较低的arg0.occurence - occurence
值出现在较低值之前,则应返回occurence
。
这是因为返回小于0的值意味着this
出现在参数之前。 0表示相等的排序,&gt; 1意味着this
出现在争论之后。
此外,如果您实现compareTo()
,则可以定义类的自然顺序。强烈建议同时覆盖equals()
并仅当true
返回0时返回compareTo()
。请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html(搜索&#39;与等号一致&#39; )。通过compareTo()
的上述实现,这意味着仅当true
具有相同的occurence
值时才返回Comparator<Signal>
。如果您不想以这种方式实现equals(可能不正确),那么您应该编写一个实现TreeSet
的类并将其传递给{{1}}构造函数。
答案 1 :(得分:1)
您正在寻找的行:
while (it.hasNext()){
Signal sig = (Signal)it.next();
System.out.println(sig.getName());
System.out.println(sig.getOccurance());
// do the same with source or whatever property
}
答案 2 :(得分:1)
您需要覆盖Signal对象中的toString
以获取比Object类中的默认实现更加用户友好的字符串。
另请注意,由于您的所有信号根据compareTo
的实施情况而相同(始终返回0),因此您无法在设置中添加多个信号。
答案 3 :(得分:0)
首先你需要覆盖toString方法,而不是使用mutator方法尝试使用实现所有实例变量的构造函数,第三件事是TreeSet使用 红黑树结构,并根据自然顺序保证元素将按升序排列。因此,在compareTo()方法中,您可以比较一个变量以获得解决方案。