2010-06-18 79 views
11

昨晚我偶然發現了一個百靈的multi_index,同時敲響了我需要通過3個不同鍵值訪問的集合,並且還重新平衡了數組語義。那麼我在boost :: multi_index中得到了我的兩個願望之一(3個不同的鍵值)。Java是否有相當於boost :: multi_index的地方?

我很好奇,如果在Java世界中存在任何類似的東西。

+0

可能矯枉過正(因此評論),你認爲是一個嵌入式數據庫的呢?有很多輕量級的數據庫,你可以嵌入和運行在內存中,我想這取決於你的性能要求.... – Nim 2013-05-20 09:51:13

回答

-2

我不知道是什麼的boost :: multi_index手段,而是根據你的問題的其餘部分,我想你可能會談論一個multi key map

+0

不,對不起。這是一個弱類型複合密鑰容器的例子。 boost :: multi_index是強類型的,但更重要的是它有多個獨立的鍵。即在multi_index_container中,您可以按名稱,SSN或出生日期查找人員。 (顯然名字和DOB不會是唯一的鍵) – MSalters 2010-09-02 11:42:12

1

我認爲簡單的答案是否定的,沒有明顯的等價物。

boost多索引類的模板非常嚴重,這在Java中不容易翻譯。有泛型,但它們並不完全相同。 (How are Java generics different from C++ templates? Why can't I use int as a parameter?)。

因此,如果沒有模板,那麼多指標類會是什麼樣子?

我想你會有你的數據類,例如Person,包含像Map實現一樣的索引成員。在這一點上,你有一個選擇:

  1. 直接添加一些「指標」來 Person類(像一些 哈希表)和寫查找 功能。在 類中管理索引 同步。
  2. 寫的「IndexProvider」類 從人完全解耦指數 功能 - 它必須能夠 動態地創建不同的索引 類型,我會想象你會通過 回調 處理同步。
  3. 1有些混合)和2) - 等的 抽象基類索引 功能,該功能不正確 解耦的行爲,而是 確實提供一些代碼重用。

我認爲,在大多數情況下1)最容易編寫,最容易維護,可能是最高性能的。 2)看起來像過度工程。

另一種選擇,如果你有很多需要建立索引的數據結構,就是將它們存儲在數據庫中。

+0

我發佈了新的答案,談論谷歌番石榴。這可能是一個解決方案 – gavioto 2015-01-22 11:21:44

2

我剛剛完成Java中的MultiIndexContainer:http://code.google.com/p/multiindexcontainer/wiki/MainPage。 我知道它並不完全等同於boost multi_index_container,但也許它可能足以滿足您的要求。

+0

謝謝,我會看看。 – 2011-03-23 13:19:08

+0

界面看起來不錯,實際上解決了多索引的要求。 – Alex 2017-05-25 08:19:08

+0

哇,也許時間過了很長一段時間後,我的舊項目復活:-)順便說一句我已經將它導出到github https://github.com/Kamosh/multiindexcontainer,但很難說它是什麼形狀。 – 2017-05-26 09:44:14

-1

我認爲你可以找到在谷歌番石榴庫中的答案。可能multimaps解決您的需求。

https://code.google.com/p/guava-libraries/wiki/CollectionUtilitiesExplained

正如這些線程評論:

+0

'multi_index'意思是你可以在內部放置一個有多個鍵的值並且每​​個鍵都有一個分組。設想一下像文件的地圖,一旦按名稱鍵入並且一旦鍵被擴展名等等。 – Alex 2017-05-24 15:24:29