在上一篇讲了LinkedHashSet集合的特点,及其是如何保证查如顺序的。
https://blog.csdn.net/LED_of_Java/article/details/92103639
而我这个类里,继承了LinkedHashSet。然后,利用Comparator接口,重写其中的Compara方法,并修改返回值,实现倒序输出。
/**
* List中存放若干学生对象(学生有学号,姓名,性别等属性),
* 去除List中重复的元素,并按学号降序输出。
* (请百度并利用LinkedHashSet集合,
* 既不会重复,同时有可预测的顺序即输入顺序)
*/
public class List extends LinkedHashSet {
public List(int id, String name, char sex) {
this.id = id;
this.name = name;
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
private int id;
private String name;
private char sex;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
if (!super.equals(o)) return false;
List list = (List) o;
return id == list.id &&
sex == list.sex &&
Objects.equals(name, list.name);
}
@Override
public int hashCode() {
return Objects.hash(super.hashCode(), id, name, sex);
}
@Override
public String toString() {
return "List{" +
"id=" + id +
", name='" + name + '\'' +
", sex=" + sex +
'}';
}
public static void main(String[] args) {
LinkedHashSet<List> l = new LinkedHashSet<>();
l.add(new List(1000, "张三", 'm'));
l.add(new List(1000, "张三", 'm'));
l.add(new List(1001, "李四", 'm'));
l.add(new List(1002, "王五", 'm'));
l.add(new List(1005, "杨八", 'f'));
l.add(new List(1003, "赵六", 'm'));
l.add(new List(1004, "马七", 'f'));
Iterator iter = l.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
class Rule implements Comparator {
@Override
public int compare(Object o1, Object o2) {
if (o1 instanceof List && o2 instanceof List) {
List l1 = (List) o1;
List l2 = (List) o2;
if (l1.getId() > l2.getId()) {
return -1;
} else if (l1.getId() < l2.getId()) {
return 1;
}
return 0;
}
throw new RuntimeException("类型不匹配,不能比较!");
}
}
}
}