2013-07-29 2 views
1

Есть ли альтернативы использованию хэш-таблиц? У меня есть этот код, и мне было интересно, можно ли обойтись без его использования. У меня есть рабочая находка, но мне сказали не использовать ее некоторыми людьми. Любая помощь приветствуется.Альтернативы Hashtable

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». –

1

если вы хотите найти элемент с itemId лучшая структура данных будет HashMap из-за времени доступа.
, но если у вас есть пункты отсортировано в соответствии с itemId, вы можете использовать другие структуры данных как arraylist или array или даже сделать свой собственный класс с четырьмя общедоступными переменными.
, но я говорю, как только выигрыш для поиска лучшего DS будет hashMap

Смежные вопросы