加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在java中处理大型String列表

发布时间:2020-12-15 03:04:19 所属栏目:Java 来源:网络整理
导读:我有一个任务,我必须通过几十亿字符串并检查,每个是否是唯一的.所有线路本身都不能容纳在PC的RAM存储器中.此外,行数可能大于Integer.MAX_VALUE. 我假设处理这些数据量的最佳方法是将每个字符串的哈希码放入某种HashTable中. 所以,这是我的问题: 我应该使用
我有一个任务,我必须通过几十亿字符串并检查,每个是否是唯一的.所有线路本身都不能容纳在PC的RAM存储器中.此外,行数可能大于Integer.MAX_VALUE.

我假设处理这些数据量的最佳方法是将每个字符串的哈希码放入某种HashTable中.

所以,这是我的问题:

>我应该使用什么而不是String.hashCode()? (返回值为int,但我可能需要很长时间)
>使用此大小的列表的最快方法/框架是什么?我最需要的是能够快速检查列表是否包含元素

解决方法

你在想这个问题,这一切都可以通过一个 MySQL表来完成,它将数据保存到磁盘而不是将所有内容保存在内存中.那么多数据从来就不是由独立应用程序有效处理的.
CREATE TABLE TONS_OF_STRINGS
(
  unique_string varchar(255) NOT NULL,UNIQUE (unique_string)
)

只需循环遍历值(假设这里以逗号分隔的列表)并尝试插入每个标记.每个失败的令牌都是重复的.

public static void main(args) {
  Connection con = DriverManager.getConnection("jdbc:mysql://localhost/database","username","password");
  FileReader file = new FileReader("SomeGiantFile.csv");
  Scanner scan = new Scanner(file);
  scan.useDelimiter(",");
  String token;
  while ( scan.hasNext() ) {
    token = scan.next();
    try {
      PreparedStatement ps = con.prepareStatement("Insert into TONS_OF_STRING (UNIQUE_STRING) values (?)");
      ps.setString(1,token);
      ps.executeUpdate();
    } catch (SQLException e) {
      System.out.println("Found duplicate: " + token );
    }
  }
  con.close();
  System.out.println("Well that was easy,I'm all done!");
  return 0;
}

完成后不要忘记清除表格,这就是大量数据.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读