Java中自定義有序不重複的集合——SetList

由於課程設計的需要,筆者需要將數據庫中的某個表的數據拿出來處理

例如樓層和建築表,有外鍵限制

一開始是使用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=未知]]


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章