我正在使用 Java 中的 Tree Set 在集合中添加一些对象。每个对象都是具有不同属性的信号。每次有新信号出现时,我都会设置对象(信号)的一些属性并将其添加到集合中,信号可以出现不止一次。对于信号,我维护一个列表,在其中存储信号名称,当我发出信号时,我检查信号是否在列表中如果它不在列表中,我只需将一个新对象添加到我的集合中,但如果信号是在列表中,我从集合中获取该信号并修改其一些属性,删除该信号并添加一个新信号。
问题是,当我第 2 次或第 3 次发出信号时,以此类推,它不会删除旧信号并保留所有具有修改属性的相同信号的出现。
这是我的代码
SortedSet<Signal> set = new TreeSet<Signal>();
ArrayList< String > messages = new ArrayList< String >();
//If the Message is new one
if(!messages.contains(messageName)){
//System.out.println("I am new signal");
//Add the new Message in Message List
messages.add(messageName);
//Create Object of Message to be stored in Set
signal = new Signal();
signal.setSource(messageSource);
signal.setName(messageName);
if(messageSource.equals("egdci") || messageSource.equals("ugdci"))
signal.setComponent(egdci_ugdci_msgComponent);
else
signal.setComponent(messageComponent);
signal.setOccurance(messageCounter);
signal.setSize(messageContent.length);
signal.setBandwidth(0F);
//Add the new Message Object in the Set
set.add(signal);
}
//If Message already exists in the list
else{
//System.out.println("I am old one");
Iterator<Signal> iterator = set.iterator();
while(iterator.hasNext()) {
signal = (Signal)iterator.next();
if(signal.getName().equalsIgnoreCase(messageName)){
System.out.println("I am here");
int occurance = signal.getOccurance() + 1;
int size = occurance * messageContent.length;
float bandwidth = 0F;
set.remove(signal);
signal = new Signal();
signal.setSource(messageSource);
signal.setName(messageName);
if(messageSource.equals("egdci") || messageSource.equals("ugdci"))
signal.setComponent(egdci_ugdci_msgComponent);
else
signal.setComponent(messageComponent);
signal.setOccurance(occurance);
signal.setSize(size);
signal.setBandwidth(bandwidth);
//Add the new Message Object in the Set
set.add(signal);
}
}
}
writeToCSV(signal , writer);
此外,我尝试根据信号的出现对文件中的信号进行排序,出现的值越高,它应该在文件的顶部。
这是我在 Signal.java 中的 compareTo 代码(我是第一次使用 Tree Set,所以不知道如何实现我的comapreTo)
@Override
public int compareTo(Signal signal) {
int thisOccurance = this.getOccurance();
return thisOccurance.compareTo(signal.getOccurance());
}
任何帮助将不胜感激...
提前致谢