Portal > Foren > Java > Allgemeine Java-Programmierung > Array nach PHP-Art
Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 18.01.2010, 16:17 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard Array nach PHP-Art

Hallo Gemeinde,

wie hier ArrayList und Iterator besprochen, habe ich nun mal einen Fall aus der realen Welt.

Folgende Situation:
Ich habe eine Reihe von Werten in einer Datenbank.
Beispielsweise:
ID Name Gruppe
1 Alfred 5
2 Herbert 5
3 Joey 5
4 Marta 1
...

Ich möchte nun die Mitglieder einer bestimmten Gruppe auslesen und in eine Datei speichern.

In PHP hätte ich jetzt einfach folgendes gemacht:
Ich hätte ein Array initiiert, dieses enthält die Gruppen_ID.
In dieses Array schreibe ich nun ein weiteres Array, welches die Namen enthält.
PHP-Code:
//$gruppe = 5
$array[$gruppe][0] = "Alfred";
$array[$gruppe][1] = "Herbert";
$array[$gruppe][2] = "Joey"
In Java würde ich das jetzt folgendermaßen lösen:
HashMap<String, ArrayList> -> String ist die ID (nein, kein Designfehler, der String ist beabsichtigt, da ich nicht mit Zahlen arbeite) und in die ArrayList füge ich meine Werte ein. Dabei schaukle ich hin und her.

Zur Erklärung
rowSyn: entspricht der Gruppennummer
rowVal: ist eine ArrayList, die alle Namen zu dieser Gruppennummer enthält


Code:
		while(result.next())
		{
			String rowSyn;
			rowSyn = result.getString("syn");
			ArrayList rowVal = new ArrayList(10);
			
			rowVal.add(result.getString("name"));
			

			while(result.next() && result.getString("syn").equals(rowSyn))
			{
					rowVal.add(result.getString("name"));
					
					//nach vorne "schaukeln" -> gehört der nächste Datensatz noch zur aktuellen Gruppe?
					if(result.next() && result.getString("syn").equals(rowSyn))
					{
						//wenn ja: tu nichts und schaukle wieder zurück.
						result.previous();
					}
					else
					{
						//wenn nicht: füge unsere Gruppe und die Namen hinzu -> schaukle zurück
						synMap.put(rowSyn, rowVal);	
						result.previous();
						break;
					}
			}
Was sagt ihr dazu?
Ist das the Java-way?
Sekundentakt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.01.2010, 16:37 Nach oben    #2
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 695
Standard

Grundsätzlich ist das der Java-Way, aber irgendwie ein bischen verkompliziert... Dieses Vor- und Zurück-"Schaukeln" is gar kein guter Stil, da kommt es schnell zu fehlern!

java Code:
  1. Map<String, ArrayList<String>> syncMap = new HashMap<String, ArrayList<String>>();
  2. while(result.next()) {
  3.     String rowSyn = result.getString("syn");
  4.     if(! syncMap.containsKey(rowSyn)){
  5.         syncMap.put(rowSyn, new ArrayList<String>());
  6.     }
  7.     syncMap.get(rowSyn).add(result.getString("name"));
  8. }
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 18.01.2010, 16:45 Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard

Klasse! Danke Johannes, sieht gleich viel übersichtlicher aus.
Sekundentakt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2010, 07:04 Nach oben    #4
fka Gottzilla
 
Benutzerbild von The_S
 
Registriert seit: 02.02.2005
Ort: Würzburg
Beiträge: 754
Standard

Ich weiß, du hasst mich, aber ich hasse solche ArrayList in HashMap Konstrukte ;) .

Möchtest du folgende Struktur:

Code:
Datenstruktur
|
+-Gruppe 1
|  |
|  +--ID/Name
|  |
|  +--ID/Name
|
+-Gruppe 2
   |
   +--ID/Name
oder

Code:
Datenstruktur
|
+-Gruppe 1
|  |
|  +--Name
|  |
|  +--Name
|
+-Gruppe 2
   |
   +--Name
? Und wie musst du auf die Daten zugreifen? Möchtest du möglichst schnell anhand der Gruppen-ID eine Gruppe erhalten? Möchtest du anhand eines Namens oder einer ID die dazugehörige Gruppe(n) erhalten? Möchtest du deine Datenstruktur schnell nach Gruppen/Namen/ID-Paaren durchsuchen? Oder alles zusammen?
The_S ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2010, 08:10 Nach oben    #5
fka Gottzilla
 
Benutzerbild von The_S
 
Registriert seit: 02.02.2005
Ort: Würzburg
Beiträge: 754
Standard

Hm ... irgendwie ist da ein Teil von meinem Beitrag verschwunden .

Was ich noch sagen wollte: Falls der zweitere von meinen Szenarien zutreffen sollte, dann wäre das aber eine andere Struktur als die, die ich in deinem Link kritisiert habe. HashMap<String, ArrayList<String>> könnte ich mich mit zufrieden geben. Wäre die Struktur aber synonym zu meinem ersten Szenario (und somit auch zu der aus deinem Link), würde die Datenstruktur folglich so aussehen: HashMap<String, ArrayList<String[]>>, dann hätte ich dagegen etwas einzuwenden.

Also falls du deinen Code später auf das erste Szenario ausbauen möchtest, müssen wir über die Struktur noch einmal reden. Falls du ständig bei dem zweiten Szenario bleiben möchtest, nicke ich das mal so ab ;) .
The_S ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2010, 08:11 Nach oben    #6
Erfahrener Benutzer
 
Registriert seit: 16.08.2008
Ort: Mecklenburg-Vorpommern
Beiträge: 314
Standard

Zitat:
Ich weiß, du hasst mich, aber ich hasse solche ArrayList in HashMap Konstrukte .


Ich möchte so etwas, wie die zweite Datenstruktur hergibt.
Die Daten werden aus einer SQL-Tabelle geladen.
Ziel der Arbeit ist es, diese schnell aus dem ResultSet in einen Behälter (in diesem Fall eine HashMap) zu laden.
Einmal getan, kann ich diese HashMap wieder der Reihe nach auslesen, um sie entweder in eine Datei zu schreiben oder anderweitig in anderen Objekten weiterzuverwenden.

Mit andern Worten: Der Schwerpunkt liegt darauf, dass ich die Gruppen/Namen schnell speichern und der Reihe nach wieder auslesen kann.
In der ArrayList/HashMap etc. muss nichts gesucht werden.

Jetzt bin ich gespannt! :)

EDIT:
Ich habs gemerkt ;).
Ich bleibe ausschließlich beim zweiten Szenario. Aus reiner Neugier: Wie wärs denn im ersten Fall Best Practice?

Geändert von Sekundentakt (19.01.2010 um 08:15 Uhr)
Sekundentakt ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2010, 11:45 Nach oben    #7
fka Gottzilla
 
Benutzerbild von The_S
 
Registriert seit: 02.02.2005
Ort: Würzburg
Beiträge: 754
Standard

Bei zweiteren solltest du dir eine eigene Klasse mit den Attributen anlegen:

Code:
public class Person {
  
  private String id;
  private String name;

  // Getter/Setter
}
und diese dann in deiner HashMap verwalten: HashMap<String, ArrayList<Person>>

Generell lässt sich natürlich darüber streiten, ob nicht auch eine eigene Klasse für die Gruppen sinnvolle wäre

Code:
public class Group {

  private String id;
  private ArrayList<Person> people = new ArrayList<Person>();

  // Getter/Setter für id

  public void addPerson(Person p) {
    people.add(p);
  }

  public void removePerson(Person p) {
    people.remove(p);
  }
}
Und dann HashMap<String, Group> (falls eine Gruppe schnell anhand ihrer ID gefunden werden soll), wenn nicht sogar nur ArrayList<Group>. Das wird halt vor allem dann interessant, wenn eine Person oder eine Gruppe > 1 Attribut hat, wie es bspw. bei deinem ArrayList<ArrayList<String[]>>-Szenario der Fall wäre.

Geändert von The_S (19.01.2010 um 15:35 Uhr) Grund: Tippfehler ausgebessert => HashMap<String, ArrayList<Group>> wird zu HashMap<String, Group>
The_S ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2010, 14:17 Nach oben    #8
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 695
Standard

Zitat:
Zitat von The_S Beitrag anzeigen
Und dann HashMap<String, ArrayList<Group>> (falls eine Gruppe schnell anhand ihrer ID gefunden werden soll)
Das wäre wohl eher Map<String, Group>

Der jeweilige Datencontainer (wie die angesprochene Klasse Person) kann selbstverständlich nach belieben gewählt werde, da im Beispiel nur der Name gegeben war, hab ich das ganze darauf vereinfacht, einen String zu verwenden.
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 19.01.2010, 15:33 Nach oben    #9
fka Gottzilla
 
Benutzerbild von The_S
 
Registriert seit: 02.02.2005
Ort: Würzburg
Beiträge: 754
Standard

Zitat:
Zitat von $traight-$hoota Beitrag anzeigen
Zitat:
Zitat von The_S Beitrag anzeigen
Und dann HashMap<String, ArrayList<Group>> (falls eine Gruppe schnell anhand ihrer ID gefunden werden soll)
Das wäre wohl eher Map<String, Group>
Ja natürlich. Tippfehler meinerseits. Sorry! Habs auch gleich ausgebessert.
The_S ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Verständnisproblem: Tabelle aus mehrdimensionalem Array erstellen la-finest PHP-Programmierung 3 30.09.2009 17:08
Kummunikation zwischen PHP Und einem "Java Server" Avaris Anwendungsdesign / Softwarearchitektur 25 07.12.2008 16:23
PHP 5.1.5, PHP 4.4.4 und PHP 5.2.0 RC2 veröffentlicht Ben Nachrichten 2 01.09.2006 16:05
Array in Bezug auf ein anderes sortieren... code5 PHP-Programmierung 2 15.05.2006 15:56
Neue PHP "release candidates": PHP 4.4.2 RC 1 und PHP 5.1 RC 6 Ben Nachrichten 1 21.11.2005 20:48


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr.


Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.3.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47