由於課程設計的需要,筆者需要將數據庫中的某個表的數據拿出來處理
例如樓層和建築表,有外鍵限制
一開始是使用List保存的,但實際操作中發現,從表中取出來樓層數據中的建築有些是重複的
List接口實現的存儲是有序可重複的,Set接口是無序不重複的,不能用下標定位數據
結合他們之間的優缺點和數據量,在不考慮性能的情況下,筆者寫了有序不重複的集合
總體是基於LinkedList實現的,重寫其add方法
List爲空,就直接添加對象,不爲空,就遍歷List,判斷其中中是否有與待插入的對象是否相同(注意重寫泛型類裏面的equles方法)
SetList類如下
public class SetList<T> extends LinkedList<T> {
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<Person> 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=未知]]