例如,是它總體上是好的有如下的結構:在java中使用映射作爲值的映射是「好」嗎?
Map <Object, Map>
在我的情況,乍一看我做需要某種結構,將有例如映射String -> Map<...>
, 或這很奇怪,我應該以其他方式解決問題?
例如,是它總體上是好的有如下的結構:在java中使用映射作爲值的映射是「好」嗎?
Map <Object, Map>
在我的情況,乍一看我做需要某種結構,將有例如映射String -> Map<...>
, 或這很奇怪,我應該以其他方式解決問題?
以這種方式設計數據結構本身並不好。這也不一定是壞事。
如果您要查找地圖對象,我會考慮使用HashMap
來提高執行時間。
來自@Rafael Osipov,在涉及併發性的情況下,考慮使用ConcurrentHashMap
來實現數據完整性。
這個'HashMap'提示是什麼?這完全不相關,可能「不好」...... – Marco13
其實HashMap是一個Map的非標準實現。在實踐項目中,你幾乎看不到別的東西。是的,問題不是關於它的 –
如果實現涉及併發性,請考慮在HashMap上使用'ConcurrentHashMap'來獲得性能增益。 – 2016-04-21 12:59:51
將地圖作爲地圖中的值沒有什麼不對。這是使用多個鍵快速查找的一種相當常見的方式。
例如,你存儲大量的Student
記錄:
class Student
private String name;
private int age;
private School school;
}
您可以將這些存儲在List<Student>
,但如果你想找到,比如,所有的學生在一定的學校誰16歲老它可能是更好的能說:
Map<School,Map<Integer,List<Student>>> index;
List<Student> subset = index.get(School.STATE_HIGH).get(16);
注意,有諸如具有獨立的複合鍵類型(在我上面的例子,代表學校和年齡一起)做同樣的事情的其他方式。另外請記住,如果您使用地圖的主要目的是效率,那麼在很多情況下,您可能會過早地進行優化。除非地圖存儲了數百萬個值,否則你將每秒訪問它們幾千次,那麼你可能需要考慮一個簡單的列表,你可以通過它來搜索。
它有幾個代碼味道對我來說。
Map
沒有指定通用類型。object
,不是強類型。所以我寧願看到:
Map<CompositeKey, ValueType>
哪裏CompositeKey
是由第一和第二項的正確實施的平等一類。和ValueType
不是Map
。
因此,例如,代替嵌套地圖:
A -> { 1 -> "ABC",
2 -> "DEF"},
B -> { 1 -> "abc",
3 -> "def"}
你有一個平坦的地圖和一個複合鍵:
(A,1) -> "ABC",
(A,2) -> "DEF",
(B,1) -> "abc",
(B,3) -> "def",
取決於你的用例。它不一定是錯的。 – khelwood
任何地方都可以使用[原始類型](https://docs.oracle.com/javase/tutorial/java/generics/rawTypes.html)。至少,使它成爲'Map
我不問行類型,而是關於有一個地圖作爲價值。 使用案例:我有一些開關,例如JComboBox,我需要一個單獨的地圖關聯到列表中的每個對象,所以如果我選擇一些相應的地圖將被使用。 –