2014-10-05 57 views
1

使用對象的屬性作爲地圖條目的關鍵是不好的做法嗎?每次我這樣做,感覺都不對。Java Map:使用值對象的屬性作爲關鍵,不好的做法?

例如:

class Foo { 
    String name; 
    String bar; 
} 

再使用這樣的地圖:

Foo foo = new Foo(); 
foo.name = "foo bar"; 
foo.bar = "blaaaa"; 

Map<String, Foo> foos = new HashMap<>(); 
foos.add(foo.name, foo); 

感覺那種錯誤。

+0

這是'Map' - 索引查找的最常見用法之一。這裏沒有問題。儘管要注意,如果'Foo'是可變的,那麼如果'Foo'發生變化,索引將變得不正確。 – 2014-10-05 20:17:55

+0

如果您擔心會浪費內存,在'String'鍵的特殊情況下,您可以利用該池(參見'String.intern'文檔)。 – Dici 2014-10-05 20:44:25

+0

在某些情況下,您可能會考慮枚舉而不是類來完成相同的用例,但更好/不可變。然後你可以例如檢查一下'HashSet'中是否有內容,而不是'HashMap',這會消除這個特殊關注點(儘管我同意這不是一個值得關注的問題)。 – 2016-04-20 12:41:06

回答

1

乍一看感覺不對。

但是使用字段作爲是合理的,也許有點多餘但合法。 鍵值來自哪裏並不重要!因爲Map的目的是檢索元素。像這樣做是公平的工作。

如果您覺得內疚,如果沒有任何副作用,您可以從課程中刪除該字段。

這可能是錯誤的 - 你沒有使用字段的方法。考慮以下scenerio:你想把兩個字符串組合成新的鍵。如果你引用了一個領域一千次,你是不走運的!你只需要替換該領域的所有事情。這可能會導致錯誤和不便,如果你不小心更換了其他東西。

但是,如果您確實有方法,只需更改方法中的部分即可。

+0

最後兩段並不是很清楚(對我來說)。 – Dici 2014-10-05 20:48:57

+0

我總是使用方法,只是使用了一個簡單的例子。不管怎麼說,還是要謝謝你! :) – 2014-10-06 09:43:39

相關問題