0

我正在使用 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());
   }  

任何帮助将不胜感激...

提前致谢

4

1 回答 1

1

如果问题只是删除旧信号,您可以使用 remove 它:

iterator.remove();

一段时间结束后,您可以创建新信号,然后将其添加到集合中。

您的其他条件应如下所示:

    else {
        // System.out.println("I am old one");
        final Iterator<Signal> iterator = set.iterator();
        boolean deleted = false;
        while (iterator.hasNext()) {
            signal = (Signal)iterator.next();
            if(signal.getName().equalsIgnoreCase(messageName)){
                iterator.remove();
                deleted = true;
                break;
            }
        }
        if(delted){
            int occurance  = signal.getOccurance() + 1;
            int size = occurance * messageContent.length;
            float bandwidth  = 0F;              

            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);
        }
    }
于 2013-09-23T15:21:59.700 回答