http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 15846|回复: 3

[其他] 如何高效往arraylist中添加不重复元素?

[复制链接]
发表于 2014-1-26 09:06:35 | 显示全部楼层 |阅读模式
大约有200多万条string,尝试了下使用arraylist.contain(keyword)这样的,但开始很快,然后越来越慢,估计是需要遍历的越来越多了吧。
有没有高效一点的方法?


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2014-1-26 09:14:59 | 显示全部楼层
建议你用字典的方法处理。
[C#] 纯文本查看 复制代码
  /// <summary>
        /// 在页面请求列表
        /// </summary>
        public ConcurrentDictionary<string, obj> objlist= new ConcurrentDictionary<string, obj>();
        /// <summary>
        /// 添加
        /// </summary> 
        /// <param name="obj">对象</param>
        public void Login(obj o)
        {
objlist[o.id] =o;
        }


用这种方法,如果有重复的可以直接覆盖

如果你非要使用你现的方法,我建议你添加的时候不要检查是否有重复,因为这样量太大了,不如等全部添加完之后再写个去重复的方法一次性解决这样很快很多。

[C#] 纯文本查看 复制代码
Set set = new HashSet();
set.addAll(list);
到这一步,已经利用set的特性去重了。

接下来再把去重后的集合放到一个新的list去即可
List newlist = new ArrayList();
newlist.addAll(set);

或者可以使用Linq
[C#] 纯文本查看 复制代码
//导入linq命名空间, 然后distinct一下就可以了. 关键代码如下:

using System.Linq;
//比如,list<object>实例为list 
var obj = list.Distinct();
//或者麻烦点要根据list<object>的字段xxx过滤就是 
var obj_1=from p in list select p.xxx distinct();

你参考下吧
 楼主| 发表于 2014-1-26 10:10:34 | 显示全部楼层
站长苏飞 发表于 2014-1-26 09:14
建议你用字典的方法处理。[mw_shl_code=csharp,true]  ///
        /// 在页面请求列表
        ///

“System.Collections.Generic.HashSet<string>”不包含“addAll”的定义,并且找不到可接受类型为“System.Collections.Generic.HashSet<string>”的第一个参数的扩展方法“addAll”(是否缺少 using 指令或程序集引用?)

我用了
using System.Collections;
using System.Collections.Generic;
发表于 2014-2-11 14:24:00 | 显示全部楼层
可以试试布隆过滤器,用来去重效率很高的
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-23 22:58

© 2014-2021

快速回复 返回顶部 返回列表