2012-04-21 21 views
16

Czy to dobrze użyć HashMap zamiast przy użyciu klasy obiektów ...... Korzystanie HashMap ....Klasa Object vs HashMap

Map<String, String> cellMap = new HashMap<String, String>(); 
int j = 0; 
while (cellIter.hasNext()) 
{ 
    HSSFCell myCell = (HSSFCell) cellIter.next(); 
    cellMap.put(columnMap[j], myCell.toString()); 
    j++; 
} 

i stosując klasę obiektu .....

ABC abc= new ABC(); 
abc.setA(myRow.getCell(0).toString()); 
abc.setB(myRow.getCell(1).toString()); 
abc.setC(myRow.getCell(2).toString()); 

Proszę mi powiedzieć w kontekście zdrowia aplikacji, wymóg pamięci etc ...

+1

Właściwie czytam plik xls, który będzie zawierał setki tysięcy rekordów mój szef poprosił mnie, aby zaktualizować wyrocznię przez odczyt danych z pliku xls ** ** jeden po drugim tylko za pomocą pobierające i ustawiające obiektu klasy w miejscu zastosowania hashmap, w którym mapuje wszystkie dane, a następnie przekazuje je do oracle. – abhi

+2

Dla osób niebędących Indianami 1 lakh = 100K :-) –

+0

Jeśli używasz HashMap, w jaki sposób uzyskujesz "typ" wartości podczas przechowywania jej w Oracle? (zakładając, że twój arkusz kalkulacyjny zawiera wartości wielu typów, takich jak łańcuch, wartości numeryczne itp.) – Ushox

Odpowiedz

25

To zależy w dużym stopniu od tego, co próbujesz osiągnąć: w celu zwiększenia elastyczności, mapa skrótów jest lepsza. Ale elastyczność ma swoją cenę: mapa hash jest również większa i wolniejsza niż klasa o identycznej liczbie mocno wpisanych pól.

  • Hash mapa ma większe zużycie pamięci niż klasy z identyczną liczbą pól
  • Hash mapa siły Boks na prymitywów
  • Hash mapa jest wolniejszy do tworzenia i dostępu

Istnieje również wpływ na czytelność: kiedy logika biznesowa jest specyficzna dla klasy o ustalonej liczbie pól, wyraźnie wygrywa klasa specjalnego przeznaczenia; gdy pola są konfigurowane dynamicznie, tablica asocjacyjna jest jedyną opcją. Można również uzyskać hybrydowy projekt, gdy obiekt korzysta z mapy mieszania do wewnętrznego przechowywania, prezentuje ładnie nazwane pola na zewnątrz i eksponuje semantykę, aby dodać więcej "pól" w trakcie pracy.

Podsumowując, zanim zdecydujesz się na mapę mieszającą ze względu na jej elastyczność, powinieneś zdecydować, czy naprawdę potrzebujesz takiej elastyczności w swoim projekcie. Czasami odpowiedź brzmi "tak", a czasami jest "nie"; nie ma rozwiązania "jeden rozmiar dla wszystkich".

3

Powinieneś zobaczyć to jako „Design” problem przed wysiłkiem. Nie trzeba robić z góry przedwczesnej optymalizacji na rzecz dobrego projektu. Pytanie brzmi: "czy musisz przejść przez kolekcję pośredników, aby wypełnić obiekt domeny ABC?" W większości przypadków nie zrobiłbym tego, ale trudno jest powiedzieć jednoznacznie tak lub ostateczny nie bez znajomości większego kontekstu.

UPDATE: 30-40K: Liczba zapisów nie ma znaczenia dla przedmiotu vs porównaniu HashMap, ponieważ zamierzamy być obsługiwane w pętli (Zastrzeżenie: nieistotne pod względem wzornictwa nie pod względem wydajności). Jednak liczba kolumn w arkuszu kalkulacyjnym jest ważna, ponieważ będzie to bezpośrednio odzwierciedlone jako liczba atrybutów w twoim obiekcie.

Jeśli to tylko migracja dane lub transfer danych wykonywania potem pójdę z podejściem HashMap. Zakładając, że ABC będzie krótkotrwałym, jednorazowym obiektem kontenera danych bez zachowania, nie ma potrzeby go tworzyć. Następnie testowałem wydajność systemu i jeśli nie spełnia ono kryteriów akceptacji, profilowałem go i optymalizowałem tylko w razie potrzeby.

+1

Hmm ... Jeśli pytanie brzmi "czy powinienem używać atrybutu HashMap zamiast atrybutów A, B i C w obiekcie mojej domeny, NIE BYŁbym użyj HashMap, A, B, C to atrybuty twojego obiektu, nie powinny być jedynie przechowywane w HashMapie – Ushox

+0

To tak jak czytanie i ustawianie danych przy użyciu hashmap lub klasy ... a następnie pobieranie z niego. ... – abhi

+0

Zaktualizowałam mój wpis – Ushox

4

Obiekt ma pola (dane) i metody (zachowanie). Jeśli twoje dane składają się ze stałego zestawu komórek (A, B i C), zdecydowanie użyj obiektu.

Java jest obiektem OO, a projektowanie OO, hermetyzacja itp. Pomagają tworzyć rozbudowane, łatwe w utrzymaniu i szybkie programy.

Mapa jest przydatna, gdy trzeba powiązać zmienną liczbę kluczy i wartości. Ale to po prostu struktura danych i nie pozwala na enkapsulację dodatkowego zachowania.

Na przykład możesz mieć metodę getAAndB() w obiekcie, która zwraca A połączoną z B. Lub możesz mieć metody do transformacji lub zapytania pól. Lub możesz przekazać wystąpienia ABC do innych obiektów, które z nich korzystają. Używanie obiektu ABD z dobrze zdefiniowanymi metodami jest znacznie łatwiejsze niż użycie obiektu Map<String, String>. Jakie są klucze mapy? Jakie są ich wartości? Gdzie jest to udokumentowane? Co jeśli chcesz zmienić klucze? Jak wykryjesz wszystkie miejsca w kodzie, w którym są używane te klucze?

+0

Mam ustalone dane do odczytania z ustaloną liczbą kolumn w ustalonej pozycji ..... Klucze do każdej wartości są również ustalone, ponieważ możesz s ee im przekazuję stałą tablicę znaków jako klucz w hashmap ... i nie chcę zmieniać kluczy ... Wiem, gdzie wszystkie będę używał tych kluczy ... rzeczy są jeśli to nie powiodła się żadna z powyższych rzeczy Po prostu WYTRZYMAJ BŁĄD – abhi

+1

Następnie użyj obiektu. Jeśli nie masz pewności co do poprawności pliku Excel, sprawdź go przed lub podczas czytania i tworzenia instancji swoich obiektów (sprawdź, czy na przykład obowiązkowe komórki są wypełnione). Ale (przypuszczając, że komórki reprezentują pola osób), znacznie łatwiej jest odczytać obiekty Person mające imię, drugie imię i nazwisko, niż postępowanie z mapą . –

+1

Rozumiem, wydaje mi się, że obiekt byłby preferowanym wyborem, gdybyś poszedł na całość ..... – abhi

Powiązane problemy