不带int的数组的java双反求
我正在从CSV文件将许多股票在特定日期的历史数据导入Java。我的目标是使用我用Java编写的程序在特定日期交易(买卖)这些股票。该程序仅配置为使用一个ticker,但现在我希望将其扩展为使用数千个(超过数千个日期)
我有两张表,一张包含股票行情和何时买入/卖出,另一张(如下图所示)包含所有价格和历史信息。 使用这两种方法,如果在表1中,我有一个指示是在y日期通过tickerx,我希望能够在价格比购买价格下跌80%时出售ticker x。为了促进这种决策,对于我可能交易的每一种股票,我都有大约十年的历史数据。我在表2中有数千万行
我希望能够参考我的每个专栏(市值、市盈率、贝塔系数…)使用股票代码和日期标识符。我想用这样一种方式来操作我的数据,即(在Java中)找到特定日期范围内特定股票代码的市盈率的最小值和最大值
我想我应该为每个股票代码和日期组合创建一个“数字键”。它是股票代码中的每个字符,转换为ASCII,连接并添加到日期。我原以为可以将它们中的每一个用作数组索引的唯一标识符,但后来意识到,我无法很好地确定股票行情数据的开始和结束时间
哪种数据类型更适合这种情况
# 1 楼答案
数据库
对于大量数据,请使用数据库。像H2 Database Engine这样的好数据库是为了做你想做的事情(搜索、排序、聚合计算),并以优化的方式进行
H2是用纯Java编写的。它可以嵌入Java应用程序中,也可以单独用作服务器
如果部署计算机上有很多内存,并且只需要暂时使用数据,那么可以通过让H2将表保留在内存中而不是保留到磁盘来最大限度地提高性能
H2可以直接从CSV文件导入。见this tutorial
Apache Commons CSV
Apache Commons CSV是一个方便的库,用于导入/导出CSV和制表符分隔的文件
我很喜欢成功地使用它几次。简化了阅读和解析的繁琐工作
# 2 楼答案
使用
HashMap
和一个结合了ticker和date的键不是更好吗比如:
这在代码中肯定更容易理解
另一个选项是使用来自Guava的^{} ,您不需要编写上面的
TickerDate
类