Discuss / Java / 模仿了TreeMap那里的比较写了一段,要是用hashset估计无法保证发送顺序

模仿了TreeMap那里的比较写了一段,要是用hashset估计无法保证发送顺序

Topic source

import java.util.*;

public class Hello {

    public static void main(String[] args) {

    List<Message> received = List.of(

                new Message(1, "Hello!"),

                new Message(2, "发工资了吗?"),

                new Message(2, "发工资了吗?"),

                new Message(3, "去哪吃饭?"),

                new Message(3, "去哪吃饭?"),

                new Message(4, "Bye")

            );

            List<Message> displayMessages = process(received);

            for (Message message : displayMessages) {

                System.out.println(message.text);

            }

        }

        static List<Message> process(List<Message> received) {

            Set<Message> set = new TreeSet<>(new Comparator<Message>() {

            public int compare(Message s1, Message s2) {

            Integer s1int = new Integer(s1.sequence);

            Integer s2int = new Integer(s2.sequence);

            return s1int.compareTo(s2int);

            }

});

            List<Message> r2 = new ArrayList<>();

            for (Message s : received)

            if(set.add(s) == true)

            r2.add(s);

            received = r2;

            return received;

        }

}

class Message {

    public final int sequence;

    public final String text;

    public Message(int sequence, String text) {

        this.sequence = sequence;

        this.text = text;

    }

}

可以的,实际上你这个并没有用到TreeSet的排序功能,只是用了它的判重。在遍历received的时候就保证顺序了。


  • 1

Reply