簡體   English   中英

如何在Java中有效訪問半稀疏數據?

[英]How can I access semi-sparse data efficiently in java?

因此,我正在處理一個將大文本文件解析為數據的問題-文件的每一行都由具有多個數據字段的Node對象表示。

在程序執行期間,將根據它們的int id字段(在文本文檔中指定)多次訪問這些對象。

如果每個id都存在,我將簡單地將它們存儲為Node[]數組,並且要訪問id x的節點,我將僅使用nodeArray[x]

但是,該數據使得大多數id值不存在。 對於我目前的數據集,只有約40-50%的id 0和最大的之間的idID_MAX在集合存在於集。

我看到的方式有兩種選擇:

使用大型Node[]和許多未填寫的條目,如

Node[] nodeArray = new Node[ID_MAX];

BufferedReader br = new BufferedReader(new FileReader(file));
String line;

while((line = br.readLine()) != null) {
    Node n = ... // parse line of text into Node object
    nodeArray[n.getID()] = n;
end
br.close();

這將使訪問具有特定id的節點變得微不足道,但是在數據集很大的情況下會占用大量額外空間。

另一個選擇是使用較小的Node[]數組,並使用稀疏的int[]數組進行索引:

Node[] nodeArray = new Node[NUM_ROWS];
int[] indexArray = new Int[ID_MAX];

BufferedReader br = new BufferedReader(new FileReader(file));
String line;
int i = 0;

while((line = br.readLine()) != null) {
    Node n = ... // parse line of text into Node object
    nodeArray[i] = n;
    indexArray[n.id] = i;
    i++;
}

總體而言,這兩者中的任何一個是否比另一個更好?還是取決於數據的大小和稀疏性? 我還有沒有想到的另一種方法比這兩種方法中的任何一種更好?

根據此處的描述,您可以使用HashMap<Integer, Node>HashMap<Long, Node>具體取決於您擁有的id的范圍。

根據您的其他要求, LinkedHashMapTreeMap可能是替代方案(如果需要按插入順序對節點進行迭代,則可以選擇LinkedHashMap如果需要按某些條件對它們進行排序,則可以選擇TreeMap )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM