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=未知]]


发布了10 篇原创文章 · 获赞 10 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览