Set集合中不能包含重复的对象,其实现类主要有HashSet和TreeSet,Set主要提供以下几个方法:
添加元素:boolean add(E e)
删除元素:boolean remove(Object e)
判断是否包含元素:boolean contains(Object e)
返回set中的元素数量:int size()
移除set中的所有元素:void clear()
HashSet:不保证顺序,由哈希表支持,和HashMap中key的要求是一样的,必须覆写equals()和hashCode()方法;
TreeSet:保证顺序,和TreeMap中的key的要求是一样的,必须实现Comparable接口,或者在创建TreeSet时,必须传入一个Comparator对象;
所以Set相当于只存储key,不存储value的Map,经常用Set去除重复元素;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class MapStudy {
public static void main(String[] args) {
// TODO 自动生成的方法存根
List<Message> rec = List.of(
new Message(0,"Hello"),
new Message(0,"Hello"),
new Message(1,"在吗?"),
new Message(1,"在吗?"),
new Message(2,"Bye"),
new Message(2,"Bye")
);
List<Message> dispmes = process(rec);
for(Message mes : dispmes) {
System.out.println(mes.text);
}
}
static List<Message> process(List<Message> rec){
List<Message> list = new ArrayList<>();
Set<Integer> set = new HashSet<>();
for(Message mes : rec) {
if(set.add(mes.seq)) {
list.add(mes);
}
}
return list;
}
}
class Message{
int seq;
String text;
Message(int seq, String text){
this.seq = seq;
this.text = text;
}
}
参考:廖雪峰Java教程;Java从入门到精通第5版;