2013-07-29 71 views
1

是否有任何替代使用散列表? 我有這個代碼,並想知道如果我可以做,而不使用它。我的工作是找到,但我被告知不要被某些人使用。任何幫助表示讚賞。散列表替代

import java.util.Hashtable; 
import java.util.Enumeration; 

public class Cart 
{ 

public Hashtable items = new Hashtable(); 


public Enumeration getEnumeration() 
{ 
return items.elements(); 
} 


public void addItem(String itemId,String desc, float price, int quantity) 
{ 
String[] item = {itemId, desc, Float.toString(price), 
Integer.toString(quantity)}; 

if (items.containsKey(itemId)) 
{ 

    String[] tmpItem = (String[])items.get(itemId); 
    int tmpQuant = Integer.parseInt(tmpItem[3]); 
    quantity += tmpQuant; 
    tmpItem[3] = Integer.toString(quantity); 
} 
else { 

    items.put(itemId, item); 
} 
} 


public float getTotalCost() { 

Enumeration e = items.elements(); 
String[] tmpItem; 
float totalCost = 0.00f; 

while (e.hasMoreElements()) { 

    tmpItem = (String[])e.nextElement(); 
    totalCost += (Integer.parseInt(tmpItem[3]) * 
    Float.parseFloat(tmpItem[2])); 
} 
return totalCost; 
} 

} 
+0

應該cuncurrently運行代碼?即來自多個線程? – einpoklum

回答

2

Hashtable是同步的,並且可能導致性能問題,這就是爲什麼我們建議你使用像一個HashMap或實現Map任何其他合適的類。

其實,如果你改變你的代碼使用Map你不會有市長問題(實際上Hashmap本身實現Map)。

+1

可能是由'ConcurrentHashMap'支持的'Map'。 –

1

,如果你想找到itemId項目的最佳數據結構將是HashMap由於訪問時間。
但如果項目分類根據itemId,您可以使用其他數據結構arraylistarray甚至有四個公共變量使自己的類。
但我說一次增益搜索最好DS將hashMap