需要将数据库中的某个表的数据拿出来处理
例如楼层和建筑表,有外键限制
一开始是使用List保存的,但实际操作中发现,从表中取出来楼层数据中的建筑有些是重复的
List接口实现的存储是有序可重复的,Set接口是无序不重复的,不能用下标定位数据
结合他们之间的优缺点和数据量,在不考虑性能的情况下,笔者写了有序不重复的集合
总体是基于LinkedList实现的,重写其add方法
List为空,就直接添加对象,不为空,就遍历List,判断其中中是否有与待插入的对象是否相同
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 + "]";
- }
-
-
- }
调用
- @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=未知]]