假设要将下列一笔数据存到数据库中,其中ID, Year, Age三个字段组成主键:CardID       Year            Age
1     2010-10-10       10
2     2010-10-10       10
3    2010-10-10       12
3    2010-10-10       12
4    2010-10-10       12
4    2010-10-10       12在存入数据库前, 需要先对数据进行检验, 看看是否有重复的记录,如有重复的记录, 要指出第几行重复,例如 上面的第国行和第六行重复了。上面的每条数据现在是存在一个对象里,各个对象放在了一个List中, 要什么比较好的算法判断数据重复的问题?

解决方案 »

  1.   

    一条记录组一个字符串放到set里 放进去后看看set的大小有没有+1 没加1就说明这是条重复数据 
      

  2.   

    set 没有重复数据。而且你的对象要实现Comparable或Comparator 借口
      

  3.   

    重写对象的equals方法
    放Map<对象,Integer>里,
    Integer里放对象的数字
      

  4.   

    二楼的办法可行,你把对象放在set中,由于set是不允许重复的,每加一条数据就判断set.size();比上一次的大1,就说明没重复,反之重复,但是如果隔行就只能说明重复,不能指明哪行与哪行重复
      

  5.   


    select *  from tbl a where rowid not in (select max(b.rowid) 
    from tbl b where a.CardID=b.CardID and a.Year = b.Year
    and a.Age=b.Age);
    上面是查出来重复的。然后出入  List中。。
      

  6.   


    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class ListRepeat { /**
     * @param args
     */
    public static void main(String[] args) {
    String s1 = "12010-10-1010";
    String s2 = "12010-10-1010";
    String s3 = "22010-10-1010";
    String s4 = "32010-10-1010";
    String s9 = "32010-10-1010";
    String s8 = "32010-10-1010";
    String s7 = "32010-10-1010";
    String s6 = "32010-10-1010";
    String s5 = "32010-10-1010";

    List<String> list1 = new ArrayList<String>();
    list1.add(s1);
    list1.add(s2);
    list1.add(s3);
    list1.add(s4);
    list1.add(s5);
    list1.add(s6);
    list1.add(s7);
    list1.add(s8);
    list1.add(s9);


    Map<String,Object> hashMap = new HashMap<String,Object>();
    for(int i =1;i<=list1.size();i++){
    if(!hashMap.containsKey(list1.get(i-1))){
    hashMap.put(list1.get(i-1), i);
    }else{
    System.out.println("重复 : 第"+i+"行。和 第"+hashMap.get(list1.get(i-1))+"行重复" );
    }
    }
    }}
      

  7.   

    list中的类 有 CardID Year Age 字段对吧?
    在这类中从新写 equals(Object other) {
     if(this.CardID.equals(other.CardID)&&this.Year .equals(other.Year )&&this.Age .equals(other.Age )) return true;

    如果 CardID Year Age 都相同在list做循环 如果  (!dataList.contains(obj)) 就添加进去思路 剩下的自己想吧