Discuss / Java / 用两种方法来解决本章节习题

用两种方法来解决本章节习题

Topic source

雨鸢梦

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

方法一

Set<Integer> set = new HashSet<>();List<Message> r = new ArrayList<>();for(Message l : received){    if(set.add(l.sequence)){        r.add(l);    }}return r;

这个方法是建立一个Set集合,用来去重,建立一个List集合,用来存放去重后的元素

set.add() //如果添加成功会返回一个true,添加失败则会返回false

方法二

Set<Message> set = new TreeSet<>();
List<Message> l = new ArrayList<>();
for(Message m:received){
    set.add(m);
}
for(Message m:set){
    l.add(m);
}
return l;

方法二相对来说比较麻烦,因为TreeSet中的元素是类的对象,所以还需要重写compareTo方法

class Message implements Comparable<Message>{
    public final int sequence ;
    public final String text;
    public Message(int s,String t){
        sequence = s;
        text = t;
    }
    public int compareTo(Message m){
        if(this.sequence==m.sequence){
            return 0;
        }
        return this.sequence>m.sequence ? 1 : -1;
    }
}

最终的结果是一样的

雨鸢梦

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

不知道为什么方法一里面的代码横着来的,在评论区重新发一遍试试看

Set<Integer> set = new HashSet<>();
List<Message> r = new ArrayList<>();
for(Message l : received){
    if(set.add(l.sequence)){
        r.add(l);
    }
}
return r;

  • 1

Reply