练习题
Topic source这段代码是错的,这个并没有实现排序功能,即没有Comparable也没有Comparator,TreeSet必须要实现其中一个,不然无法排序。覆写了equals和hashCode只是实现了去重,对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
芒果味儿momo
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();
}
}