Discuss / Java / 练习题

练习题

Topic source

package com.itranswarp.learnjava;

import java.util.*;

public class Main {

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) {

        // TODO: 按sequence去除重复消息

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

        Set<Message> set = new HashSet<>();

        for (Message str : received) {

            if(set.add(str)) {

            listNew.add(str);

            }       

        }

        return listNew;

}

}

class Message {

    public final int sequence;

    public final String text;

    public Message(int sequence, String text) {

        this.sequence = sequence;

        this.text = text;

    }

    @Override

    public boolean equals(Object o) {

    if (o instanceof Message) {

    Message m = (Message)o;

    return Objects.equals(this.text, m.text) && this.sequence == m.sequence;

    }

    return false;

    }

    @Override

    public int hashCode() {

    return sequence+text.hashCode();

    }

}

ElGordo

#2 Created at ... [Delete] [Delete and Lock User]

这段代码是错的,这个并没有实现排序功能,即没有Comparable也没有Comparator,TreeSet必须要实现其中一个,不然无法排序。覆写了equals和hashCode只是实现了去重,对TreeSet不是必要的。我也是初学者,有不对请指出,谢谢!

可这不是TreeSet啊

代码确实没有排序,更正一下

public class Main {

public static void main(String[] args) {

List<Message> received = List.of(

            new Message(1, "Hello!"),

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

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

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

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

            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) {

        // TODO: 按sequence去除重复消息

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

        Set<Message> set = new HashSet<>();

        for (Message str : received) {

            set.add(str);

        }       

        for (Message str: set) {

        listNew.add(str);

        }     

        return listNew;

}

}

class Message {

    public final int sequence;

    public final String text;

    public Message(int sequence, String text) {

        this.sequence = sequence;

        this.text = text;

    }

    @Override

    public boolean equals(Object o) {

    if (o instanceof Message) {

   Message m = (Message)o;

    return Objects.equals(this.sequence, m.sequence);

    }

    return false;

    }

    @Override

    public int hashCode() {

    return sequence;

    }

}


  • 1

Reply