Newsgroup: it.comp.java
Titolo: Vector

ciao a tutti,
	sto perdendo un po' di ore dietro a questo codice che non riesco a capire:
  ....
	public void testVectorContains() {	
		Vector v = new Vector() ;
		v.add(new News("titolo 1", "link 1", "desc 1"));
		v.add(new News("titolo 2", "link 2", "desc 2"));
		v.add(new News("titolo 3", "link 3", "desc 3"));
		News n = new News("titolo 3", "link 3", "desc 3");
		boolean b =  v.contains(n);
		if(b == false)
			System.out.println("Vector.Contains() error");
		else
			System.out.println("Vector.Contains() Ok");
	}
Magari sarà una cosa già discussa ... ma qualcuno mi spiega perchè il 
metodo contains() non trova l'elemento?
Ringrazio tutti.
-- 
Mess
http://www.mibmagazine.it

 metodo contains() non trova l'elemento?
Dalla documentazione:
Returns: true if and only if the specified object is the same as a 
component in this vector, as determined by the equals method; false 
otherwise.
Quindi: Devi definire nella tua classe "News" un metodo "boolean 
equals(Object obj)" che ritorna "true" se l'Object passato e' uguale a 
"questo" oggetto.
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !

 		boolean b =  v.contains(n);
contains usa il metodo equals della classe News per trova l'element. Se
News non ha una sua propria implementatzione di equals viene usate
naturalmente una implementazione di un parent die News, probabilmente
quella di Object.
Per l'equals di Object due oggetti sono uguali solo se sono lo stesso
ogetto, cioé con
News a=new News("titolo 1", "link 1", "desc 1");
News b=a;
News c=new News("titolo 1", "link 1", "desc 1");
il risultato di a.equals(b) e true mentre a.equals(c) e false perche non
si tratta dello stesso ogetto, man di un'altro ogetto (che per caso ha lo
stesso contenuto. 
Perche a.equals(c) sia true ci vuole un'implementazione di equals nella
classe News che ispezional il contenuto delle tre stringhe dei due oggetti
News e di come risultato true se il contenuto e lo stesso.
claudio
-- 
Claudio Nieder, Kanalweg 1, CH-8610 Uster, Tel 
+41 79 357 6743
yahoo messenger: claudionieder aim: claudionieder icq:42315212
mailto:
pri...@claudio.ch
 
http://www.claudio.ch

 claudio
Grazie mille! Adesso funzia !!!
Cmq ho provato ad avere lo stesso problema nel caso in cui gli oggetti 
memorizzati in Vector erano stringhe ... li che si fa?
-- 
Mess
http://www.mibmagazine.it

Mess wrote:

Ciao,
l'oggetto String implementa già il methodo equals che quindi puoi 
utilizzare direttamente.
//Francesco


in realtà il mio problema è leggermente diverso poichè le stringhe 
contenute nell'ArrayList provengono da un file XML con codifica UTF-8 e 
devono essere confrontate con quelle di una JText con codifica Cp1252 
come da Properties dell'oggetto System.
In pratica il confronto fallisce sempre ed il metodo seguente ritorna 
sempre false se cerco una parola del tipo 'perché'
	public boolean contains(String word){
 
		for(int i=0; i < hm.size(); i++ ) {
			String s = ((String)hm.get(i);
			if( s.compareTo( word )==0  ) {
				return true;
			}				
		}
		return false;
	}
Ogni suggerimento è ben accetto
ringrazio ancora
-- 
Mess
http://www.mibmagazine.it

Hai provato con equals anzichè compareTo?

 
sě non cambia nulla!
-- 
Mess
http://www.mibmagazine.it

sono 2 oggetti differenti, in 2 locazioni di memoria diverse. Non sono
lo stesso oggetto. e ovviamente contains() non lo trova.
non ricerca VALORI identici, ma ricerca LO STESSO oggetto.
Se vuoi un confronto tra oggetti diverso, devi definirtelo. Potresti
anche ridefinire contains() (non credo sia final, vedi un po')
ciao

temo che tu debba 'normalizzare' le stringhe prima di elaborarle.

salve a tutti!avevo un dubbio:ho creato un vettore utilizzando la
classe vector (contiene delle stringhe)come faccio a verificare se una
stringa immessa tramite un jtextfield è già presente?insomma io
vorrei evitare che nel mio vettore siano immesse due stringhe
identiche....ho provato a fare un codice del tipo:
public boolean addBrano(String unbrano){
	for(int i=0;i<brano.capacity();i++){
	String	b =(String)brano.elementAt(i);
	if (b.equals(unbrano))
	return(false);}
brano.addElement(unbrano);
return(true);}
....ma sembra nn funzionare.Accetto qualsiasi tipo di aiuto!grazie!

In realtà quello che dici non è proprio esatto poichè il metodo 
contains() funziona con le stringhe, ti riporto di seguito un caso di 
test scritto per JUnit come sempio:
		ArrayList list = new ArrayList();
		list.add("Stringa1");
		list.add("Stringa2");
		list.add("Stringa3");
		list.add("Stringa4");
		list.add("Stringa5");
		list.add("perch\u00e8");
		assertTrue(list.contains("Stringa1")==true);
		assertTrue(list.contains("perch\u00e8")==true);
il test funziona e non genera errori. Il problema per il quale avevo 
postato io all'inizio della discussione era leggerment diverso. 
All'avvio della mia applicazione i carico in un array list il contenuto 
di un file XML con encoding UTF-8. Il metodo contains() mi da dei 
problemi quando deve verificare la presenza di parole che contengono 
lettere accentate. E sincermaente ancora adesso non so spiegarmene il 
perchè. Suppongo che si tratti di un problema di encoding ma le stringhe 
  java, una volta caricate in memoria dovrebbero essere tutte unicode no 
? Allora perchè questo problema?
Ogni consiglio è ben accetto.
saluti
-- 
Mess
http://www.mibmagazine.it


a.sca...@gmail.com
 ha scritto:

guarda che Vector<E>.contains() usa E.equals() per confrontare gli 
oggetti ( e nella fattispecie String.equals() confronta la sequenza che 
rappresenta le stringhe non le istanze )
-- 
sbi

Roberto Ferranti ha scritto:

ops, il suo è un Vector<News> non un Vector<String>
resta cmq che debba ridefinire News.equals() non Vector.contains() :)
-- 
sbi