黑马程序员技术交流社区

标题: 集合性能问题 [打印本页]

作者: xiewen    时间: 2013-4-26 00:42
标题: 集合性能问题
本帖最后由 xiewen 于 2013-5-15 00:36 编辑

有两个List集合列表,编写一个方法返回这两个List集合列表相同元素的List列表
a.这两个List集合里装的是Student对象,Student类里有一个int类型的id字段
b.这两个List集合每个都至少有10万条数据,重点考虑性能

作者: 曹睿翔    时间: 2013-4-26 01:16
等等回复,没人解决你就要自己完善了啊
作者: xiewen    时间: 2013-4-26 01:30
曹睿翔 发表于 2013-4-26 01:16
等等回复,没人解决你就要自己完善了啊

我就是不知道所以才问大家啊
作者: breeze    时间: 2013-4-26 07:58
用List自己的retainsAll方法就是用来返回两个集合的交集的,如果一定要自己写一个方法那就便利较小的那个集合,if (largelargeList.contain(smallList.get(i)) {newnewList.add(smallList.get(i)); i++;} 如果大集合包含了小集合中某一个元素,将这个元素加入新的集合
作者: 曹睿翔    时间: 2013-4-26 09:23
breeze 发表于 2013-4-26 07:58
用List自己的retainsAll方法就是用来返回两个集合的交集的,如果一定要自己写一个方法那就便利较小的那个集 ...

深藏不露啊,可以贴出代码不,想法不错,方法名字起的很专业
作者: 刘胜寒    时间: 2013-4-26 09:25
本帖最后由 刘胜寒 于 2013-4-26 09:26 编辑

性能...把其中的一个list的元素放入到Hashset容器中因为容易起去重。。
要重写hashCode和equalse方法
然后用另个的list中的元素去判断Hashset中是否包含这个元素
如果返回为true则把这个元素添加到List集合中
这样的话只要 10w+10w了
要是用Treeset应该是10w+log(10w)/log(2)
作者: xiewen    时间: 2013-4-26 10:09
刘胜寒 发表于 2013-4-26 09:25
性能...把其中的一个list的元素放入到Hashset容器中因为容易起去重。。
要重写hashCode和equalse方法
然后 ...

还有没有别的好方法?
作者: 刘胜寒    时间: 2013-4-26 11:15
xiewen 发表于 2013-4-26 10:09
还有没有别的好方法?


不过基本思想一致
都是用哈希表来判断是否相同,不用HashSet来实现
直接用一个boolean类型的数组来替换HashSet
比HashSet要快....而且节省内存空间...
但是你要自己写个Hash函数这个有点小不爽
不要问我怎么写Hash函数....其实我也不回..
java提供这个HashCode其实也不错
作者: xiewen    时间: 2013-4-26 11:18
刘胜寒 发表于 2013-4-26 11:15

不过基本思想一致
都是用哈希表来判断是否相同,不用HashSet来实现

求代码?
作者: xiewen    时间: 2013-4-26 11:19
刘胜寒 发表于 2013-4-26 09:25
性能...把其中的一个list的元素放入到Hashset容器中因为容易起去重。。
要重写hashCode和equalse方法
然后 ...

求代码!
作者: 刘胜寒    时间: 2013-4-26 11:19
xiewen 发表于 2013-4-26 11:18
求代码?

哥们你别逼我啊.....

作者: xiewen    时间: 2013-4-26 11:21
breeze 发表于 2013-4-26 07:58
用List自己的retainsAll方法就是用来返回两个集合的交集的,如果一定要自己写一个方法那就便利较小的那个集 ...

求代码啊
作者: xiewen    时间: 2013-4-26 11:23
breeze 发表于 2013-4-26 07:58
用List自己的retainsAll方法就是用来返回两个集合的交集的,如果一定要自己写一个方法那就便利较小的那个集 ...

retainsAll方法性能高不?
作者: 刘胜寒    时间: 2013-4-26 11:29
xiewen 发表于 2013-4-26 11:23
retainsAll方法性能高不?

貌似不行...
虽然是系统的提供的东西...
系统提供的东西通用性强
但是牺牲了效率..
这个你都懂的..
不信我们可以测试一下吗..
超过100w估计就能看出来了..
作者: 刘胜寒    时间: 2013-4-26 11:43
xiewen 发表于 2013-4-26 11:21
求代码啊

把你的Student类发过来
作者: breeze    时间: 2013-4-26 22:11
曹睿翔 发表于 2013-4-26 09:23
深藏不露啊,可以贴出代码不,想法不错,方法名字起的很专业

多谢夸奖了, 因为是手机发的所以代码就没能敲上
作者: 曹睿翔    时间: 2013-4-26 22:17
刘胜寒 发表于 2013-4-26 11:29
貌似不行...
虽然是系统的提供的东西...
系统提供的东西通用性强

为毛这么专业呀寒寒,反正我学习了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2