Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >特定文件处理需求的数据结构选择- java

特定文件处理需求的数据结构选择- java
EN

Stack Overflow用户
提问于 2013-06-04 05:58:18
回答 2查看 277关注 0票数 2

我查找了类似于我的问题,但我正在寻找java内置数据结构约束下的最佳解决方案。

我有两个纯文本文件。虽然file1有一个用户名列表,但file2有来自这些用户和其他用户的推特帖子。twitter上的帖子只是简单地以纯文本形式在文件中推送。

对于每个用户,如果存在post,我必须提取post中使用的所有不同的哈希标签(假设哈希标签是整数,每个帖子仅限于一行)。

这是我对数据结构的选择

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Map<String, LinkedHashSet<Integer>> usernames = new HashMap<>();

我处理这个问题的方法

  1. 读取file1以填充用户名键,将默认值设为null。
  2. 按顺序读取file2,类似于post = file2.readLine()
  3. 如果在hashMap键中找到post中的用户名,则将post中所有已发现的哈希标记添加到值集中。

这种方法和数据结构是否对一百万用户(file1)来说是一种很好的方法,比如一千万篇文章(file2)?

EN

回答 2

Stack Overflow用户

发布于 2013-06-04 06:08:52

我得说你在重新发明方向盘。当有优秀的、快速的、有能力的、成熟的、健壮的和免费的Java关系数据库可用时,为什么要担心自己建立一个内存中的关系数据模型。

如果要这样做,我只需编写一个程序来读取文本文件中的数据,然后将数据插入我的数据库中。我推荐HSQLDB。如果与单独可用的JDBC驱动程序一起使用,Apache也可与SQLite一样可用。

RDBMs负责搜索、存储和数据映射。它可能比您自己尝试的任何解决方案都更健壮、更有表现力。

如果我要在这个项目中使用HSQLDB,那么我将要编写的DDL将如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE CACHED TABLE Users (
    user_id       INTEGER       GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    :
    :

};

CREATE CACHED TABLE Tweets (
    tweet_id      INTEGER       GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
    user_id       INTEGER       NULL,
    :
    :

    CONSTRAINT    twe_fk_user   FOREIGN KEY ( user_id ) REFERENCES Users ( user_id )
);

CREATE CACHED TABLE Tags ( 
    tag_id      INTEGER         GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY
    :
    :

);

CREATE CACHED TABLE Tweet_Tag_Bridge (
    tweet_id     INTEGER       NULL,
    tag_id       INTEGER       NULL,

    CONSTRAINT   bridge_pk     PRIMARY KEY ( tweet_id, tag_id ),
    CONSTRAINT   brid_fk_twe   FOREIGN KEY ( tweet_id ) REFERENCES Tweets ( tweet_id ),
    CONSTRAINT   brid_fk_tag   FOREIGN KEY ( tag_id )  REFERENCES Tags ( tag_id )
);

表tweet映射为与用户有多对一的关系(用户可能有多个tweet);而tweet通过桥接表tweet_tag_bridge与标记有多到多的关系。桥表中主键的使用确保标记对于任何单个tweet都是唯一的(也就是说,任何tweet都不应该有多个标记)。

票数 5
EN

Stack Overflow用户

发布于 2013-06-04 06:07:04

您可能希望使用TreeSet<Integer>而不是LinkedHashSet<Integer> --它将使用更少的内存(因为它没有负载因子)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16919815

复制
相关文章
oracle resetlogs后goldengate如何继续工作
最近有朋友在群里面咨询oracle resetlogs后,goldengate无法继续抽取日志,如何能够继续工作.
徐靖
2020/08/05
7300
oracle resetlogs后goldengate如何继续工作
UIRefreshControl
UIRefreshControl 平时很少用UIRefreshControl,iOS开发者上手就是MJRefresh 都忘记还有UIRefreshControl这么一个系统提供的控件了。 使用方法 @property (nonatomic, strong) UIRefreshControl *refreshControl; self.refreshControl = [[UIRefreshControl alloc] init]; [_refreshControl addTarget:self
程序员不务正业
2018/06/13
6670
老电脑如何继续继续工作
作者从2017年开始使用Linux作为主操作系统,作者当作主操作系统的Linux如下:
zeekling
2023/05/15
8190
JVM 堆内存溢出后,其他线程是否可继续工作?
我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。
用户2781897
2021/04/23
5740
JVM 堆内存溢出后,其他线程是否可继续工作?
jvm堆内存溢出后,其他线程是否可继续工作
最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。
美的让人心动
2018/12/05
9800
jvm堆内存溢出后,其他线程是否可继续工作
最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。
纯洁的微笑
2018/12/07
1K0
WWDC2016 Session笔记 - iOS 10 UICollectionView新特性
关于 iOS 10 UICollectionView的新特性,主要还是体现在如下3个方面
一缕殇流化隐半边冰霜
2018/08/30
2K0
WWDC2016 Session笔记 - iOS 10  UICollectionView新特性
UICollectionView
平常我在业务开发中,绝大部分情况都是使用的UITableView,而UICollectionView则是在极少情况下才会去使用,这就导致了我对UICollectionView略感陌生。本篇文章就是以二者对比的方式对UICollectionView做一个小总结。
拉维
2019/08/12
1.2K0
iOS10 / Swift3.0 / XCode 8 总结
因为它企图访问敏感数据时没有在应用程序的Info.plist 设置privacy key 新增的privacy setting如下:
100001509164
2022/01/20
8080
iOS10 / Swift3.0 / XCode 8 总结
iOS14开发-UIView
在 iOS 13 中引入了新的 API — Diffable Data Source,它不仅能够驱动 UITableView 和 UICollectionView,而且可以更简单高效的实现数据的刷新。
YungFan
2021/01/21
11.9K0
vmware workstation 克隆后网卡eth0不能正常工作
解决方法如下 修改/etc/udev/rules.d/70-persistent-net.rules 将eth0这行注释掉或者删除, 这里记载的还是克隆系统时的MAC地址,但是新启动的系统MAC已经更改, 将NAME="eth1" 改为 “eth0”,ATTR 标记的MAC地址,这个是虚拟机为这个虚拟网卡分配的MAC,用上面的MAC替换掉 /etc/sysconfig/network-scripts /ifcfg-eth0中的MAC 然后重启即可 还有一个办法,不用eth0,直接用eth1等,把/etc/sysconfig/network-scripts/ifcfg-eth0复制成/etc/sysconfig/network-scripts/ifcfg-eth1
三杯水Plus
2018/11/14
2.4K0
美团面试:JVM 堆内存溢出后,其他线程是否可继续工作?
我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。
程序猿DD
2021/07/13
4730
美团面试:JVM 堆内存溢出后,其他线程是否可继续工作?
IOS UIRefreshControl刷新控件
import UIKit class ViewController:UIViewController,UITableViewDelegate,UITableViewDataSource{ @IBOutlet weak var tabvLayout:UITableView! var refreshControl = UIRefreshControl() override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. self.automaticallyAdjustsScrollViewInsets = false //添加刷新 refreshControl.addTarget(self, action:#selector(refreshData), for: UIControlEvents.valueChanged) refreshControl.attributedTitle =NSAttributedString(string:”松开后自动刷新”) tabvLayout.addSubview(refreshControl) refreshData() } // 刷新数据 func refreshData() { self.tabvLayout.reloadData() self.refreshControl.endRefreshing() } // MARK:- UITableViewDataSource func tableView(_ tableView:UITableView,numberOfRowsInSection section:Int) -> Int { return 10; } func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath) -> UITableViewCell { let cell = UITableViewCell(style:UITableViewCellStyle.value1, reuseIdentifier:“newsCell”) let date = NSDate() let timeFormatter = DateFormatter() timeFormatter.dateFormat = “yyy-MM-dd ‘at’ HH:mm:ss.SSS” //(时间格式) let strNowTime = timeFormatter.string(from:date as Date) as String cell.textLabel?.text = strNowTime let rect = CGRect(x:0,y:cell.frame.height-1,width:self.view.frame.size.width,height:1) let label = UILabel(frame:rect) label.backgroundColor = UIColor.lightGray() cell .addSubview(label) return cell; } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
用户5760343
2019/07/08
7150
IOS UIRefreshControl刷新控件
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。
芋道源码
2019/07/05
3380
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。
公众号 IT老哥
2021/09/16
3000
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。
java进阶架构师
2021/05/08
5010
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。
乔戈里
2019/08/20
3370
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。
良月柒
2019/12/03
4470
某团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
很纠结,是工作还是继续考研?
简单介绍一下这位同学的情况,他目前大四,学校不是很好。大学期间有参加过一些比赛,也有一些小厂的实习经验。但是在今年的考研当中发挥不是很好,专业课压线,国家线没过。由于临近毕业,他现在非常烦恼,不知道是如何选择是应该二战考研呢还是应该先找个工作干着。
帅地
2021/05/27
4480
美团面试题:JVM堆内存溢出后,其他线程是否可继续工作?
最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。
Spark学习技巧
2019/06/28
5520
美团面试题:JVM堆内存溢出后,其他线程是否可继续工作?

相似问题

如何使用库SortableJS提交新排序的元素列表

15

如何使用SortableJS仅检测drop事件

13

如何使用动态创建的HTML使用拖放?(SortableJS)

10

如何从启用SortableJS的UL中删除元素

139

如何在cakephp4中比较datetime

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文