2012-04-21 12 views
16

Ist es gut zu verwenden hashmap stattdessen die Objektklasse der Verwendung ...... HashMap verwenden ....Klassenobjekt 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++; 
} 

Und Objektklasse mit .....

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

Bitte sagen Sie mir im Zusammenhang mit der Anwendung Gesundheit, Speicherbedarf usw. ...

+1

Eigentlich lese ich eine XLS-Datei, die lakhs Datensätze enthalten wird mein Chef hat mich gebeten, das Orakel durch Lesen von Daten aus XLS-Datei ** ONE BY ONE ** nur mit Getter und Setter der Objektklasse anstelle der Verwendung zu aktualisieren eine hashmap, in der alle Daten abgebildet werden und dann an oracle übergeben werden. – abhi

+2

Für Nicht-Inder, 1 Lakh = 100K :-) –

+0

Wenn Sie eine HashMap verwenden, wie erhalten Sie den "Typ" des Werts, wenn Sie es in Oracle speichern? (Angenommen, Ihre Tabelle enthält Werte von mehreren Typen wie String, numerische Werte usw.) – Ushox

Antwort

25

Das hängt sehr davon ab, was Sie erreichen wollen: Aus Gründen der Flexibilität ist die Hash-Karte besser. Aber die Flexibilität hat ihren Preis: Hash-Karte ist auch größer und langsamer als eine Klasse mit der gleichen Anzahl von stark typisierten Feldern.

  • Hash Karte hat größeren Speicherbedarf als eine Klasse mit identischer Anzahl von Feldern
  • Hash Karte Kräfte Boxen auf Primitiven
  • Hash Karte langsamer zu schaffen und den Zugang

Es gibt auch eine Auswirkung auf die Lesbarkeit: Wenn die Geschäftslogik für eine Klasse mit einer festgelegten Anzahl von Feldern spezifisch ist, gewinnt eine Spezialklasse eindeutig. Wenn die Felder dynamisch konfiguriert werden, ist die Hash-Tabelle die einzige Option. Sie könnten auch ein Hybrid-Design haben, wenn ein Objekt einer Hash-Karte für seine Speicher intern verwendet, präsentiert von außen schön benannte Felder und setzt Semantik mehr „Felder“ hinzufügen, wie Sie gehen.

Um es zusammenzufassen, bevor Sie sich für seine Flexibilität mit einer Hash-Karte gehen zu entscheiden, sollten Sie entscheiden, ob Sie wirklich alles, was Flexibilität bei der Gestaltung benötigen. Manchmal ist die Antwort "Ja" und manchmal ist es "Nein"; Es gibt keine "one size fits all" -Lösung dafür.

3

Sie diese vor dem Auftritt als „Design“ -Ausgabe sehen soll. Keine vorzeitige vorzeitige Optimierung zugunsten eines guten Designs. Die Frage lautet also: "Müssen Sie eine Zwischensammlung durchlaufen, um Ihr Domänenobjekt ABC zu füllen?" In den meisten Fällen würde ich es nicht, aber es ist schwer, ein definitives ja oder ein definitives keine, ohne den größeren Kontext zu wissen, zu sagen.

UPDATE: 30-40K: Anzahl der Datensätze ist irrelevant für das Objekt vs HashMap Vergleich, weil sie in einer Schleife verarbeitet sein werden (Disclaimer: irrelevant in Bezug auf Design nicht in Bezug auf die Leistung). Die Anzahl der Spalten in Ihrer Tabelle ist jedoch wichtig, da dies direkt als Anzahl der Attribute in Ihrem Objekt angezeigt wird.

Wenn dies nur eine Datenmigration oder Datenübertragung Übung dann würde ich mit dem HashMap Ansatz gehen. Unter der Annahme, dass ABC ein kurzlebiges, wegwerfbares Datencontainerobjekt ohne Verhalten ist, muss es nicht erstellt werden. Dann würde ich die Leistung des Systems testen und wenn es die Akzeptanzkriterien nicht erfüllt, würde ich es profilieren und es nur optimieren, wenn es notwendig ist.

+1

Hmm ... Wenn die Frage ist "sollte ich ein HashMap-Attribut anstelle von A, B und C-Attribute in meinem Domain-Objekt verwenden, würde ich nicht Verwenden Sie eine HashMap.A, B, C sind die Attribute Ihres Objekts, sie sollten nicht nur in einer HashMap gespeichert werden – Ushox

+0

Es ist eigentlich wie Lesen und Einstellen der Daten mit hashmap oder einer Klasse ... und dann Abrufen von ihm. .... – abhi

+0

Aktualisiert mein Beitrag. – Ushox

4

Ein Objekt hat Felder (Daten) und Methoden (Verhalten). Wenn Ihre Daten aus einer festen Menge von Zellen (A, B und C) bestehen, verwenden Sie definitiv ein Objekt.

Java ist ein OO-Objekt, und OO-Design, Verkapselung usw. sind für Sie da zu bauen robust, wartbar und schnelle Programme zu helfen.

Eine Karte ist nützlich, wenn Sie eine variable Anzahl von Schlüsseln und Werten zuordnen müssen. Aber es ist einfach eine Datenstruktur, und Sie können kein zusätzliches Verhalten einkapseln.

Sie könnten beispielsweise eine getAAndB() - Methode in Ihrem Objekt haben, die A mit B verkettet zurückgibt. Oder Sie haben Methoden zum Transformieren oder Abfragen der Felder. Oder Sie könnten ABC-Instanzen an andere Objekte übergeben, die sie verwenden. Die Verwendung eines Objekts ABD mit wohldefinierten Methoden ist viel einfacher als die Verwendung einer Map<String, String>. Was sind die Schlüssel der Karte? Was sind ihre Werte? Wo ist es dokumentiert? Was, wenn Sie die Schlüssel ändern möchten? Wie werden Sie alle Stellen im Code erkennen, an denen diese Schlüssel verwendet werden?

+0

Ich habe feste Daten mit festen keine Spalten an festen Position zu lesen ... Keys zu jedem Wert ist auch festgelegt, wie Sie können s ee im übergeben eine feste String-Array als Schlüssel in der hashmap ... und ich möchte nicht die Tasten zu ändern .... Ich weiß, wo alles ich werde mit diesen Tasten .... die Dinge sind, wenn es scheitert an einem der oben genannten Dinge. PROBLEM EINEN FEHLER – abhi

+1

Verwenden Sie dann ein Objekt. Wenn Sie sich nicht sicher sind, ob die Excel-Datei gültig ist, validieren Sie sie vor oder während des Lesens und erstellen Sie Instanzen Ihrer Objekte (prüfen Sie, ob zum Beispiel obligatorische Zellen ausgefüllt sind). Aber (vorausgesetzt, die Zellen stellen Personengruppen dar), ist es viel lesbarer, mit Person-Objekten umzugehen, die einen Vornamen, einen zweiten Vornamen und einen Nachnamen haben, als mit einer Map . –

+1

Ich habe es Es scheint, Objekt wäre die bevorzugte Wahl, überall zu gehen ..... – abhi