Was ist ein HashSet?

Status
Nicht offen für weitere Antworten.

Limon

Mitglied
Ich weiss nur so viel, dass man im HashSet Daten ablegen kann. Ich hab folgenden Quelltext:

Code:
public class HashSetTest{
	
			
		private String name="";
		private int preis;
		private int anzahl;
		
		
	public	HashSetTest (String n, int p, int a) {
		
		this.name=n;
		this.preis=p;
		this.anzahl=a;
	}
	
	public static void main (String[]args){
		
	HashSetTest ding1 = new HashSetTest ("IPod", 199, 2);
	HashSetTest ding2 = new HashSetTest ("JavaBuch", 29, 1);
	HashSetTest ding3 = new HashSetTest ("Notebook", 1069, 1);	

				
	}
}

Meine Aufgabe ist es einen
HashSet meineDinger
zu erstellen und die drei Sachen dort abzulegen. In meinem Buch steht nichts über HashSet. Kann mir einer helfen?

Danke.
 

Limon

Mitglied
Ok, Danke...jetzt kenne ich die Theorie, ich kann sie aber nicht anwenden, vielleicht kann mir einer a meinem Beispiel zeigen wie es geht?!
 

Limon

Mitglied
Code:
public class HashSetTest{
	
			
		private String name="";
		private int preis;
		private int anzahl;
		
		
	public	HashSetTest (String n, int p, int a) {
		
		this.name=n;
		this.preis=p;
		this.anzahl=a;
	}
	
	
	
	public static void main (String[]args){
		
	HashSetTest ding1 = new HashSetTest ("IPod", 199, 2);
	HashSetTest ding2 = new HashSetTest ("JavaBuch", 29, 1);
	HashSetTest ding3 = new HashSetTest ("Notebook", 1069, 1);	

	HashSet meineDinger = new HashSet();

				
	}
}

Zeile 24 bringt immer eine Fehlermeldung: cannot find symbol class HashSet
 

Limon

Mitglied
oh, danke

Code:
import java.util.*;
public class HashSetTest{
	
			
		private String name="";
		private int preis;
		private int anzahl;
		
		
	public	HashSetTest (String n, int p, int a) {
		
		this.name=n;
		this.preis=p;
		this.anzahl=a;
	}
	
	
	
	public static void main (String[]args){
		
	HashSetTest ding1 = new HashSetTest ("IPod", 199, 2);
	HashSetTest ding2 = new HashSetTest ("JavaBuch", 29, 1);
	HashSetTest ding3 = new HashSetTest ("Notebook", 1069, 1);	

	HashSet meineDinger = new HashSet();
	
	meineDinger.add(ding1);
	

				
	}
}

Zeile 28 macht Probleme:
HashSetTest.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

was heisst das?
 

mikachu

Top Contributor
Code:
import java.util.HashSet;

public class HashSetTest {

	HashSetTest(){}

	public static void main(String[] args) {
		HashSet<Ding> hashSet = new HashSet<Ding>();

		hashSet.add( new Ding( "IPod", 199, 2 ) );
		hashSet.add( new Ding( "JavaBuch", 29, 1 ) );
		hashSet.add( new Ding( "Notebook", 1069, 1 ) );
	}

}

class Ding
{
	String name;
	int preis, anzahl;

	Ding(String n, int p, int a)
	{
		name	= n;
		preis	= p;
		anzahl	= a;
	}
}

was die fehlermeldung zu sagen hat, weiß ich auch nicht...
 

Leroy42

Top Contributor
Das liegt daran, daß du seit Java 1.5 den Typ der Objekte angeben kannst, die in dein Hashset reindürfen.
Früher konntest du in die Collections alles kunterbunt reinwerfen. 3 Lösungen.

1. Definiere HashSet<HashSetTest> meineDinger = new HashSet<HashSetTest>(); um nur Instanzen von
HashSetTest (und deren Unterklassen) zu erlauben.

2. Definiere HashSet<Object> meineDinger = new HashSet<HashSetTest>(); um nur alles zu erlauben.

3. Beim Übersetzen die Option angeben, die javac mitteilt für Version 1.4 zu übersetzen.
 

Limon

Mitglied
mika hat gesagt.:
Code:
import java.util.HashSet;

public class HashSetTest {

	HashSetTest(){}

	public static void main(String[] args) {
		HashSet<Ding> hashSet = new HashSet<Ding>();

		hashSet.add( new Ding( "IPod", 199, 2 ) );
		hashSet.add( new Ding( "JavaBuch", 29, 1 ) );
		hashSet.add( new Ding( "Notebook", 1069, 1 ) );
	}

}

class Ding
{
	String name;
	int preis, anzahl;

	Ding(String n, int p, int a)
	{
		name	= n;
		preis	= p;
		anzahl	= a;
	}
}

was die fehlermeldung zu sagen hat, weiß ich auch nicht...

sieht vernünftig aus, nur versehe ich die Zeile 5 nicht. Ohne sie geht's nicht?
 
B

bygones

Gast
schau nochmal in dein Java Buch und lese alles über die Grundlagen....

1. die meldung von java ist kein fehler, sondern nur eine Warnung (siehe Leroys post)
2. Zeile 5 nennt sich Konstruktor, der da er hier keine extra Aufgabe erfüllt nicht nötig ist, ansonsten aber die initiierung eines Objektes definiert.

wie gesagt - steht alles in den Büchern :wink:
 

Limon

Mitglied
jetzt muss ich eine Methode: filter (Collection coll, String verdaechtig) schreiben, die alle verdächtigen Elemente rausfiltert.

Nach stundenlangem Kopfzerbrechen hab ich doch entschlossen hier reinzuschreiben.

Weiss jemand wie es geht?

Danke im voraus.
 

Limon

Mitglied
Code:
import java.util.HashSet; 

 class HashSetTest { 
 
   public static void main(String[] args) { 
      HashSet<Ding> meineDinger = new HashSet<Ding>(); 

      meineDinger.add( new Ding( "IPod", 199, 2 ) ); 
      meineDinger.add( new Ding( "JavaBuch", 29, 1 ) ); 
      meineDinger.add( new Ding( "Notebook", 1069, 1 ) ); 
     
   } 


	static void filter(Collection coll, String verdaechtig) {
		
		Iterator it= meineDinger.iterator();
		while(it.equals("verdaechtig")) 
		System.out.print("Der Inhalt ist verdaechtig");
		
		}

} 

class Ding {
	 
   String name; 
   int preis; 
   int anzahl; 

   Ding(String n, int p, int a) {
   	 
      this.name   = n; 
      this.preis   = p; 
      this.anzahl   = a; 
   } 
}

so ähnlich?
 

Limon

Mitglied
Code:
import java.util.*; 

 class HashSetTest { 
 
   public static void main(String[] args) { 
      HashSet<Ding> meineDinger = new HashSet<Ding>(); 

      meineDinger.add( new Ding( "IPod", 199, 2 ) ); 
      meineDinger.add( new Ding( "JavaBuch", 29, 1 ) ); 
      meineDinger.add( new Ding( "Notebook", 1069, 1 ) ); 
     
     meineDinger.ausgeben();
   } 
    
   public void ausgeben(){
   	System.out.print(this.name+":\t");
   	Iterator it = this.meineDinger.iterator();
   	while (it.hasNext())
   	System.out.print(it.next()+" ");
   	System.out.println("\n");
   }
} 

class Ding {
	 
   String name; 
   int preis; 
   int anzahl; 

   Ding(String n, int p, int a) {
   	 
      this.name   = n; 
      this.preis   = p; 
      this.anzahl   = a; 
   } 
}

also das läuft auch nicht...warum?
 
G

Guest

Gast
läuft nicht, weil:

ad 1) du versuchst, in der methode ausgeben() auf objekte zuzugreifen, die nur, und nur in main instantiiert worden sind, und welche auch somit nur und nur dort gültig sind.

ad 2) du in der o.g. methode auf ein attribute namens "name" versuchst zuzugreifen, du aber das attribut in der klasse Ding meinst.

=> meine schlussfolgerung(en):
1. dir ist der objektorientierte gedanke noch nicht so richtig klar geworden
2. wenn ihr das in der schule / uni behandelt, ist irgendwann davor schonmal auf das thema genauer eingegangen...
 

mikachu

Top Contributor
die methode ausgeben() ist leicht zu implementieren...

Code:
	public void ausgeben(){
		Iterator<Ding> it = this.meineDinger.iterator();
		while ( it.hasNext() )
		{
			Ding temporaeresDing = it.next();
			System.out.print( "Titel: " + temporaeresDing.name +
							  " -> Preis: " + temporaeresDing.preis +
							  " -> Anzahl: " + temporaeresDing.anzahl );
			System.out.println();
		}
	}

hierbei muss 'meineDinger' als Klassenattribut deklariert werden :!:

jetzt frag ich mich nur noch, was du mit deiner methode filter() für Dinge filtern willst.
wo der name mit verdaechtig übereinstimmt?

MfG mika
 

Limon

Mitglied
Code:
import java.util.*; 

 class HashSetTest { 
 
   public static void main(String[] args) { 
      HashSet<Ding> meineDinger = new HashSet<Ding>(); 

      meineDinger.add( new Ding( "IPod", 199, 2 ) ); 
      meineDinger.add( new Ding( "JavaBuch", 29, 1 ) ); 
      meineDinger.add( new Ding( "Notebook", 1069, 1 ) ); 
     
     
   } 
    
   public void ausgeben(){ 
      Iterator<Ding> it = this.meineDinger.iterator(); 
      while ( it.hasNext() ) 
      { 
         Ding temporaeresDing = it.next(); 
         System.out.print( "Titel: " + temporaeresDing.name + 
                       " -> Preis: " + temporaeresDing.preis + 
                       " -> Anzahl: " + temporaeresDing.anzahl ); 
         System.out.println(); 
      } 
   }

} 

class Ding {
	 
   String name; 
   int preis; 
   int anzahl; 

   Ding(String n, int p, int a) {
   	 
      this.name   = n; 
      this.preis   = p; 
      this.anzahl   = a; 
   } 
}

Zeile 16 macht Probleme: "cannot find symbol variable meineDinger"


mit filter (Collection coll, String verdaechtig) meine ich eine Methode, die registriert ob der String-Wert "verdaechtig" entspricht und entfernt es.
 
B

bygones

Gast
meineDinger (was für ein name btw ^^) ist eine lokale Variable in der main methode, daher kann sie keine andere methode kennen.

Entweder du übergibst meineDinger der ausgeben methode als parameter oder machst meineDinger zu einer globalen variable
 

Limon

Mitglied
Code:
import java.util.*; 

 class HashSetTest { 
 
 HashSet<Ding> meineDinger = new HashSet<Ding>();
  
   public static void main(String[] args) { 
      
    HashSet<Ding> meineDinger = new HashSet<Ding>(); 
      meineDinger.add( new Ding( "IPod", 199, 2 ) ); 
      meineDinger.add( new Ding( "JavaBuch", 29, 1 ) ); 
      meineDinger.add( new Ding( "Notebook", 1069, 1 ) ); 
      
      meineDinger.ausgeben();
    } 
     
  
    
   public void ausgeben(){ 
      Iterator<Ding> it = this.meineDinger.iterator(); 
      while ( it.hasNext() ) 
      { 
         Ding temporaeresDing = it.next(); 
         System.out.print( "Name: " + temporaeresDing.name + 
                       " -> Preis: " + temporaeresDing.preis + 
                       " -> Anzahl: " + temporaeresDing.anzahl ); 
         System.out.println(); 
      } 
   }

} 


class Ding {
	 
   String name; 
   int preis; 
   int anzahl; 

   Ding(String n, int p, int a) {
   	 
      this.name   = n; 
      this.preis   = p; 
      this.anzahl   = a; 
   } 
}

wie kann ich die Methode ausgeben anwenden? So wie ich's in Zeile 14 gemacht habe ist ja falsch.
 
B

bygones

Gast
1. möglichkeit:
Code:
  meineDinger.ausgeben(meinDinger); 
}
public void ausgeben(HashSet dieDinger){
 Iterator<Ding> it = dieDinger.iterator();
 //....
}

2. möglichkeit:
Code:
class HashSetTest { 

HashSet<Ding> meineDinger; 
  
   public static void main(String[] args) { 
   
    meineDinger = new HashSet<Ding>(); 
      meineDinger.add( new Ding( "IPod", 199, 2 ) ); 
      meineDinger.add( new Ding( "JavaBuch", 29, 1 ) ); 
      meineDinger.add( new Ding( "Notebook", 1069, 1 ) ); 
      
      meineDinger.ausgeben(); 
    }
 

Limon

Mitglied
Sorry wenn ich nerve, aber das beschissene Programm will einfach nicht funktionieren. Eine Woche sitze ich schon an ihr. Zeile 14 ist offenbar wieder falsch.

Code:
import java.util.*; 

 class HashSetTest { 
 
 HashSet<Ding> meineDinger = new HashSet<Ding>();
  
   public static void main(String[] args) { 
      
    HashSet<Ding> meineDinger = new HashSet<Ding>(); 
      meineDinger.add( new Ding( "IPod", 199, 2 ) ); 
      meineDinger.add( new Ding( "JavaBuch", 29, 1 ) ); 
      meineDinger.add( new Ding( "Notebook", 1069, 1 ) ); 
      
      meineDinger.ausgeben(Ding); 

    } 
     
  
    
   public void ausgeben(HashSet meineDinger){ 
      Iterator<Ding> it = this.meineDinger.iterator(); 
      while ( it.hasNext() ) 
      { 
         Ding temporaeresDing = it.next(); 
         System.out.print( "Name: " + temporaeresDing.name + 
                       " -> Preis: " + temporaeresDing.preis + 
                       " -> Anzahl: " + temporaeresDing.anzahl ); 
         System.out.println(); 
      } 
   }

} 


class Ding {
	 
   String name; 
   int preis; 
   int anzahl; 

   Ding(String n, int p, int a) {
   	 
      this.name   = n; 
      this.preis   = p; 
      this.anzahl   = a; 
   } 
}
 

tini

Bekanntes Mitglied
Du hast genau zwei Möglichkeiten.

1.:
Zeile 9: Entferne "HashSet<Ding>"
Zeile 14: Ersetze durch
Code:
ausgeben();
Zeile 20: Entferne "HashSet meineDinger"

2.:
Zeile 5: Entferne komplette Zeile
Zeile 14: Ersetze durch
Code:
ausgeben(meineDinger);
Zeile 21: Entferne "this."
 

Limon

Mitglied
tini hat gesagt.:
Du hast genau zwei Möglichkeiten.

1.:
Zeile 9: Entferne "HashSet<Ding>"
Zeile 14: Ersetze durch
Code:
ausgeben();
Zeile 20: Entferne "HashSet meineDinger"

2.:
Zeile 5: Entferne komplette Zeile
Zeile 14: Ersetze durch
Code:
ausgeben(meineDinger);
Zeile 21: Entferne "this."

beides mal hab ich die Fehlermeldung: non-statis variable meineDinger cannot be referenced from a static context

ich geb's auf
 

tini

Bekanntes Mitglied
Aufgegeben wird hier nicht! :meld:

Dann mach mal folgendes (zusätzlich zu Möglichkeit 1 oder 2 von gestern):
Zeile 7: Ersetze diese Zeile durch
Code:
public HashSetTest() {
Mach ne neue main-Methode:
Code:
public static void main(String[] args) {
HashSetTest test = new HashSetTest();
}

Das funktioniert dann.
 

Limon

Mitglied
@ tini, vielleicht könntest es selber verbessern und testen, wäre echt nett, brauche das dringend
Danke


Code:
public class HashSetTest { 
 
 
  HashSet<Ding> meineDinger = new HashSet<Ding>(); 
  
   public HashSetTest { 
      
      public static void main(String[] args){
      
      meineDinger.add(new Ding( "IPod", 199, 2 ) ); 
      meineDinger.add(new Ding( "JavaBuch", 29, 1 ) ); 
      meineDinger.add(new Ding( "Notebook", 1069, 1 ) ); 
      
      ausgeben(); 

    } 
     
 }
    
   public void ausgeben(){ 
      Iterator<Ding> it = this.meineDinger.iterator(); 
      while ( it.hasNext() ) 
      { 
         Ding temporaeresDing = it.next(); 
         System.out.print( "Name: " + temporaeresDing.name + 
                       " -> Preis: " + temporaeresDing.preis + 
                       " -> Anzahl: " + temporaeresDing.anzahl ); 
         System.out.println(); 
      } 
   }

} 


class Ding {
	 
   String name; 
   int preis; 
   int anzahl; 

   Ding(String n, int p, int a) {
   	 
      this.name   = n; 
      this.preis   = p; 
      this.anzahl   = a; 
   } 
}
 

tini

Bekanntes Mitglied
Also gut, weil du es bist :wink:
Code:
import java.util.*; 

class HashSetTest { 

HashSet<Ding> meineDinger = new HashSet<Ding>(); 
  
	public HashSetTest() {
		meineDinger = new HashSet<Ding>(); 
	    meineDinger.add( new Ding( "IPod", 199, 2 ) ); 
	    meineDinger.add( new Ding( "JavaBuch", 29, 1 ) ); 
	    meineDinger.add( new Ding( "Notebook", 1069, 1 ) ); 
	      
	    ausgeben(); 
	}

   public static void main(String[] args) { 
      HashSetTest test = new HashSetTest();
   } 
      
  
    
   public void ausgeben(){ 
      Iterator<Ding> it = meineDinger.iterator(); 
      while ( it.hasNext() ) 
      { 
         Ding temporaeresDing = it.next(); 
         System.out.print( "Name: " + temporaeresDing.name + 
                       " -> Preis: " + temporaeresDing.preis + 
                       " -> Anzahl: " + temporaeresDing.anzahl ); 
         System.out.println(); 
      } 
   } 

} 


class Ding { 
    
   String name; 
   int preis; 
   int anzahl; 

   Ding(String n, int p, int a) { 
       
      this.name   = n; 
      this.preis   = p; 
      this.anzahl   = a; 
   } 
}
Und sei nicht so ungeduldig. Ich muss nebenbei auch noch ein bissl arbeiten.
EDIT: wenn du dich GENAU an meine Anweisungen gehalten hättest, hättest du es auch selber hinbekommen. :bae:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J HashSet mit Comparable sortieren Java Basics - Anfänger-Themen 13
berserkerdq2 Geht collections.sort bei allen? Linkedhashset, ArrayList, HashSet etc. Java Basics - Anfänger-Themen 4
volcanos HashSet und Iterator -> Falsche Sortierreihenfolge ? Java Basics - Anfänger-Themen 18
D Erste Schritte Code verstehen - HashSet Java Basics - Anfänger-Themen 8
J Hashset Java Basics - Anfänger-Themen 13
J HashSet Methode contains liefert false (hash Methode überschrieben) Java Basics - Anfänger-Themen 3
W Element aus HashSet in String umformen Java Basics - Anfänger-Themen 7
T HashSet in List-Object Java Basics - Anfänger-Themen 5
C Auf einzelne Werte aus HashSet zugreifen Java Basics - Anfänger-Themen 10
J Klassen HashSet, TreeSet: unregelmäßige Zahlenreihen beim Befüllen Java Basics - Anfänger-Themen 7
T Methoden HashSet Objekt mit Zufallszahlen befüllen Java Basics - Anfänger-Themen 3
J Verstehe meine HashSet Ausgabe nicht Java Basics - Anfänger-Themen 5
W Verknüpfung von Räumen mit Hashset Java Basics - Anfänger-Themen 10
J HashSet contain Methode funktioniert nicht wie gewollt Java Basics - Anfänger-Themen 7
M Collections HashSet verständnisproblem Java Basics - Anfänger-Themen 9
R Hashset.add(Array) liefert immer true? Java Basics - Anfänger-Themen 23
Mrtwomoon Collections Hashset elemente ohne Eckigeklammer ausgeben Java Basics - Anfänger-Themen 9
M Collections Problem bei Überschreibung von hashcode() und equals() bei Hashset-Implementierung Java Basics - Anfänger-Themen 5
A Elemente in HashSet enthalten oder nicht Java Basics - Anfänger-Themen 6
A HashSet (oder besser geignetes) Java Basics - Anfänger-Themen 14
T Hashset - Allgemeine Fragen Java Basics - Anfänger-Themen 19
J So ähnlich wie HashSet Java Basics - Anfänger-Themen 2
D HashSet vs Liste Java Basics - Anfänger-Themen 5
T HashSet Java Basics - Anfänger-Themen 3
F suche Elemente in HashSet Java Basics - Anfänger-Themen 5
E Collections HashSet - Ausgabe sortiert? Java Basics - Anfänger-Themen 3
J HashSet Fehlerhaft Java Basics - Anfänger-Themen 10
J HashSet Implementierung Java Basics - Anfänger-Themen 16
D Problem mit HashSet Java Basics - Anfänger-Themen 12
darekkay Datentypen HashSet bzw. LinkedList mit Werten initialisieren Java Basics - Anfänger-Themen 3
B Hashset iterieren problem Java Basics - Anfänger-Themen 3
C HashSet Problem Java Basics - Anfänger-Themen 3
DasBrot Datentypen HashSet contains() Java Basics - Anfänger-Themen 3
F HashSet u. LinkedHashSet Zugriff auf Werte? Java Basics - Anfänger-Themen 2
F HashSet und LinkedHashSet Instanzierung warum so? Java Basics - Anfänger-Themen 7
M HashSet.contains() Java Basics - Anfänger-Themen 2
N Map<String, HashSet<String>> Umwandeln in Map<String, ArrayList<String>> Java Basics - Anfänger-Themen 14
neurox Limit bei HashSet? Java Basics - Anfänger-Themen 2
Povlsen84 HashSet mit eigenen Datentypen Java Basics - Anfänger-Themen 6
G HashSet vs. TreeSet Java Basics - Anfänger-Themen 3
G hashset überschreibt werte bei add Java Basics - Anfänger-Themen 1
G Wie mach ich ein HashSet für eigene Objecte? Java Basics - Anfänger-Themen 9
M HashSet Initialisierungsgröße? Java Basics - Anfänger-Themen 5
F doppelte Elemente in HashSet Java Basics - Anfänger-Themen 5
G Probleme mit HashSet Java Basics - Anfänger-Themen 5
S HashSet in HashMap, Zugriff Java Basics - Anfänger-Themen 3
G Zahlen aus HashSet in ein int Array übergeben Java Basics - Anfänger-Themen 15
G Hashset verknüpfen mit BufferedReader Java Basics - Anfänger-Themen 18
G HashSet Java Basics - Anfänger-Themen 21
P HashSet und Referenzen Java Basics - Anfänger-Themen 9
B Warum hat HashSet kein get(Object o) ? Java Basics - Anfänger-Themen 8
H umwandeln zu Hashset ?! Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben