前提是需要保持有序性,所以不能采用Set如果对List中的每个值都遍历List,来判断List中是不是有重叠的值,效率太低了,不能采用判断是不是重叠是根据对象的某一个字段来判断的请问,有没有什么比较好的办法?最好效率比较高

解决方案 »

  1.   

    Set的确有几个实现可以保持有序,好像LinkedHashSet也可以保持有序但是因为我这个需求是基于Vector的实现,本身已经有几个类似get(int i)的方法,所以不能改变对外的api,用Set的话,能实现吗?
      

  2.   

    首先你的List里面存放的是什么类型的对象而且重复值 到底是 对象内存一样 还是紫荆定义的某几个属性相同就是同一个对象contains 应该也是遍历 你最好在list里面放一个 标志对象 比如这个对象存储了 List里面其他对象的标志位 在插入之前先对调用标志对象的方法看是不是有重复值 就可以避免遍历 List了
      

  3.   

    将List中的数据导入SET,然后再导出来不就可以了~~SET相当于过滤器了
      

  4.   

    个人觉得List.contains()就挺好。。
      

  5.   

    第一,Set也可以保持有序。
    第二,要避免重复,不遍历成员是不可能的,Set的内部也是采用遍历的。
    第三,要避免重复,你必须为成员类定义equals()方法(最好同时定义hashCode()方法和compareTo()方法),String对象除外,因为String类已经对这些做了很好的定义了。
      

  6.   

    To interpb:
    正在试验你说的标志位的方法
      

  7.   

    避免重复,你用Hashtable类,不是挺好吗
      

  8.   

    add的时候加个判断
    if (list.contains(obj)){//如果包含了一个重复的对象,就不加}
      

  9.   

    请改成LinkedHashSet
    TreeSet会重新排序的。
      

  10.   

    public  boolean havaSameElement(){
    Map map=new HashMap();
    List list= new YourList();
    for(int i=0;i<list.size();i++){
    Object ob=list.get(i);
    if(map.containsKey(ob)){
    return false;
    }else{
    map.put(ob,"");
    }
    }
    return true;
    }
      

  11.   

    依据字段来判断的话。上面的程序改动一点就可以了:
    Object[] object=(Object[]) list.get(i);
    String ob=(String) object[2];
      

  12.   

    collections.sort(List ,Compare);
    collections.b...search(List,.....);