舉個例子,我想製作一個收銀機程序。忽略,對於緊湊的緣故,人們不會use floats for currency我的第一反應就是用線沿線的爲面值的枚舉,東西:使用enum可以使用地圖,反之亦然嗎?
private enum Currency {
ONE_HUNDRED(100.00f),
FIFTY(50.00f),
TWENTY(20.00f),
TEN(10.00f),
FIVE( 5.00f),
TWO( 2.00f),
ONE( 1.00f),
HALF_DOLLAR( 0.50f),
QUARTER( 0.25f),
DIME( 0.10f),
NICKEL( 0.05f),
PENNY( 0.01f);
private final float value;
Currency(float value) {
this.value = value;
}
public float getValue() {
return this.value;
}
@Override
public String toString() {
return this.name().replace("_", " ");
}
}
但最後我也跟着本能,SANS深謀遠慮,和爲摩爾斯電碼轉換器做了類似的事情,有人建議我使用地圖,而不是顯式地使用Bimap。我在這個特定的場景中看到了這個集合的吸引力,但是總的來說,我想詢問是否有任何理由選擇另一個可以使用的理由?如果不是上述代碼,我是這樣做的:
Map<String, Float> currency = new LinkedHashMap<>();
currency.put("One Hundred", 100.00f);
currency.put("Fifty", 50.00f);
currency.put("Twenty", 20.00f);
currency.put("Ten", 10.00f);
currency.put("Five", 5.00f);
currency.put("Two", 2.00f);
currency.put("One", 1.00f);
currency.put("Half Dollar", 0.50f);
currency.put("Quarter", 0.25f);
currency.put("Dime", 0.10f);
currency.put("Nickel", 0.05f);
currency.put("Penny", 0.01f);
它會因任何原因而優越嗎?
像這樣的情況可以被利用,是否有任何性能優勢相比,還有一種更好/傳統?更易維護/適應性強?
有什麼經驗法則我可以使用,當我應該使用一個在另一個?
枚舉是強類型的,可以有方法。性能是微不足道的,直到你認爲它是一個問題。 – 2015-01-21 05:46:35
地圖可以改變;枚舉不能。地圖可以在運行時查找;枚舉不能(沒有反射)。地圖可以具有雙向映射;枚舉不能。枚舉很快;地圖不那麼如此。枚舉是一流的,可以有方法和變量;地圖值不能。 – 2015-01-21 05:47:29