一个List<User>, 其中user有name属性,我想知道里面的user的名字有没有重复的,这个list比较大,怎么才能快速检查完呢?

解决方案 »

  1.   

    我觉得最简单也比较快的方式:
    建立一个set,
    遍历list,每一个名字先判断set中是否没有,如果Set中没有,则加入Set,
    如果已经有,则说明该名字有重复。
    Set userNameSet;
    List userList;
    for(User u:userList){
      if (userNameSet.contains(u.getName())){
        System.out.println(u.getName()+" already exist.");
      }
    }
      

  2.   


      if(list.contains(u.getName)){
        System.out.println(u.getName()+" already exist.");
      }
      

  3.   

    用一个临时的HashSet来作List userList;
    Set userNameSet= new HashSet();
    for(User u:userList){
      if (userNameSet.contains(u.getName())){
        System.out.println(u.getName()+" already exist.");
      }
      else 
        userNameSet.add(u.getName());
    }
      

  4.   

    也可以把每一个name加到set里看看set的size变不变。其实都是利用set的吧。
      

  5.   

    学习不过想问下,为什么第一时间都想到的是set?
    是因为有contains函数的缘故?
      

  6.   

    但是如果用了userNameSet.contains(u.getName())不是还是得不断比较吗?还是得遍历吧?
      

  7.   

    遍历比较是肯定的不过算法可以优化一下,可以用LinkedList把遍历过的顺序保存,用二分法查找(或者用二叉树保存查找)
    个人觉得这样效率比较高