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

我需要将得到一个没有重复数据的LIst。先写了一个关于set值的方法。privateSetgetList(SetstringList,Strings){stringLis... 我需要将得到一个没有重复数据的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集合,我上面的程序有没有什么问题?
求大神指点,有金币相送。
如有问题 敬请详细描述及解决方法。
展开
 我来答
1435397496
推荐于2017-11-26 · TA获得超过697个赞
知道小有建树答主
回答量:317
采纳率:96%
帮助的人:181万
展开全部

 

 

直接这样就行了,上面的图片是代码及输出结果,其中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);

}

那一天的蒲公英
2013-12-02 · TA获得超过139个赞
知道小有建树答主
回答量:140
采纳率:100%
帮助的人:92.6万
展开全部
你这个是有问题的,你指的重复的数据应该是内容重复吧,虽然说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,如果有,则不做任何操作,如果没有,则将数据加入,不要担心性能问题,现在的计算机,这种小循环完全不影响性能
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
未完成的歌12
2013-12-02 · 超过10用户采纳过TA的回答
知道答主
回答量:40
采纳率:0%
帮助的人:15.5万
展开全部
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方法
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
仁仰乎00eb8
2013-12-02 · TA获得超过118个赞
知道答主
回答量:79
采纳率:0%
帮助的人:69.1万
展开全部
这么做没什么问题,String类型的变量如果内容一样,其hashcode值时一样的。只是没必要变成set再变成list.直接遍历一遍用s1.equals(s2);存到新list就可以了啊。你这样没什么好处又麻烦。
而且你的变量名起的很奇怪,set类型为啥要叫XXList呢,mySet,stringSet 会不会要好些。
追问
不是关键啊,我项目里的内容不变透露,那个是随便起的名字而已。
我的list 需要N多次塞值,
那么我需要N-1次进行遍历?
这样也太麻烦了。
追答
那你上面的程序是可以的,不过你可以考虑把最后数据集保持成set类型,中间处理这个myNeedList最好也支持set类型,到最终结果再进行相应转换。不行就按上面做吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ceast2009
2013-12-02 · TA获得超过134个赞
知道小有建树答主
回答量:201
采纳率:0%
帮助的人:64.6万
展开全部
没什么问题

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中的重复数据去除掉。
哪种方法比较好?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式