由于课程设计的需要,笔者需要将数据库中的某个表的数据拿出来处理
例如楼层和建筑表,有外键限制
一开始是使用List保存的,但实际操作中发现,从表中取出来楼层数据中的建筑有些是重复的
List接口实现的存储是有序可重复的,Set接口是无序不重复的,不能用下标定位数据
结合他们之间的优缺点和数据量,在不考虑性能的情况下,笔者写了有序不重复的集合
总体是基于LinkedList实现的,重写其add方法
List为空,就直接添加对象,不为空,就遍历List,判断其中中是否有与待插入的对象是否相同
SetList类如下
public class SetList extends LinkedList {
private static final long serialVersionUID = 1434324234L;
@Override
public boolean add(T object) {
if (size() == 0) {
return super.add(object);
} else {
int count = 0;
for (T t : this) {
if (t.equals(object)) {
count++;
break;
}
}
if (count == 0) {
return super.add(object);
} else {
return false;
}
}
}
}
Person类
public class Person {
private int id, age;
private String name, sex;
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (id != other.id)
return false;
return true;
}
@Override
public String toString() {
return "Person [id=" + id + ", age=" + age + ", name=" + name
+ ", sex=" + sex + "]";
}
//省略构造器、get和set等
}
调用
@Test
public void test(){
List list = new SetList<>();
list.add(new Person(1, 20, "小明", "男"));
list.add(new Person(2, 20, "小红", "女"));
list.add(new Person(2, 20, "小花", "女"));
list.add(new Person(4, 20, "小辉", "未知"));
System.out.println(list);
}
输出结果
[Person [id=1, age=20, name=小明, sex=男], Person [id=2, age=20, name=小红, sex=女], Person [id=4, age=20, name=小辉, sex=未知]]