关于List集合中用Set排除重复数据。

我需要将得到一个没有重复数据的LIst。
先写了一个关于set值的方法。
private Set getList(Set stringList,String s) {
stringList.add(s);
return stringList;
}
然后在程序中我需要的地方调用上面的方法

Set myList =new HashSet();
String s1= “ aa‘;
String s2= “ bb‘;
String s3= “ cc‘;
String s4= “ dd‘;
getList(myList,s1);
getList(myList,s2);
getList(myList,s3);
getList(myList,s4);
List myNeedList = new ArrayList(myList);

myNeedList 就是我需要的List集合,我上面的程序有没有什么问题?
求大神指点,有金币相送。
如有问题 敬请详细描述及解决方法。

 

 

直接这样就行了,上面的图片是代码及输出结果,其中s2和s4是重复的,但是输出的结果中没有重复值

public static void main(String[] args) {

Set myList =new HashSet();

String s1= "aa";

String s2= "bb";

String s3= "cc";

String s4= "bb";

myList.add(s1);

myList.add(s2);

myList.add(s3);

myList.add(s4);

List myNeedList = new ArrayList(myList);

System.out.println(myNeedList);

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-02
你这个是有问题的,你指的重复的数据应该是内容重复吧,虽然说Set这种集合无序,不可重复(当加入相同的引用是会被替换),但是,java是根据引用地址来判断数据是否相同,现在你用的是string,而且string是直接赋值的,这样没问题,但是如果你的String是new 出来的话,这样就会导致你set里面数据的重复,因为即使内容相同,new出来的String和用=号赋值的string引用是不同的

举个例子
String S1 = “a”;
String S2 = "a";
String S3 = new String("a");

S1 == S2 //这个是true
S1 == S3 //这个是false
==号 比较的是内存地址追问

需要向一个List中add 值,然后将List中的重复数据去除掉。
哪种方法比较好? 简单点的?

追答

list有个contains(Object obj)方法,就是用来判断集合中是否存在obj是否被包含在集合中
楼主还不明白数据内容与对象地址的区别!
两个数据完全一样的对象,内存地址有可能不同,当内存地址不同的时候,contains方法会认为你要放进去的对象和已经存在的不同,即使你list中已经存在数据相同的对象了

如果一定要数据内容不重复,只能写个循环遍历下list,如果有,则不做任何操作,如果没有,则将数据加入,不要担心性能问题,现在的计算机,这种小循环完全不影响性能

第2个回答  2013-12-02
Set myList =new HashSet();
String s1= “ aa‘;
String s2= “ bb‘;
String s3= “ cc‘;
String s4= “ dd‘;
myList.add(s1);
myList.add(s1);
myList.add(s1);
myList.add(s1);
List myNeedList = new ArrayList(myList);
我觉得楼主的方法够简单了,就是myList.add(s1);就可以了不需要getList方法
第3个回答  2013-12-02
这么做没什么问题,String类型的变量如果内容一样,其hashcode值时一样的。只是没必要变成set再变成list.直接遍历一遍用s1.equals(s2);存到新list就可以了啊。你这样没什么好处又麻烦。
而且你的变量名起的很奇怪,set类型为啥要叫XXList呢,mySet,stringSet 会不会要好些。追问

不是关键啊,我项目里的内容不变透露,那个是随便起的名字而已。
我的list 需要N多次塞值,
那么我需要N-1次进行遍历?
这样也太麻烦了。

追答

那你上面的程序是可以的,不过你可以考虑把最后数据集保持成set类型,中间处理这个myNeedList最好也支持set类型,到最终结果再进行相应转换。不行就按上面做吧

第4个回答  2013-12-02
没什么问题

private static Set getList(Set stringList, String s) {
        stringList.add(s);
        return stringList;
    }

    public static void main(String[] args) {

        Set myList = new HashSet();
        String s1 = "aa";
        String s2 = "bb";
        String s3 = "cc";
        String s4 = "dd";
        getList(myList, s1);
        getList(myList, s2);
        getList(myList, s3);
        getList(myList, s4);
        List myNeedList = new ArrayList(myList);

    }

追问

就是需要向一个List中add 值,然后将List中的重复数据去除掉。
哪种方法比较好?

相似回答