Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    confronto tra oggetto ed arrayList

    Salve a tutti,
    ho un ArrayList popolata da un insieme di oggetti(bean nel mio caso). Dovrei confrontare l'intera ArrayList con un valore specifico di un istanza singola del bean per verificare se esiste all'interno dell'ArrayList un oggetto che contenga quel determinato parametro. Ho provato con
    codice:
    		Iterator<ApplicationSettingObj> x = appSettingListXML.iterator();
    		try
    		{
    		while(x.hasNext())
    			{
    			ApplicationSettingObj currObj = new ApplicationSettingObj();
    			currObj = x.next();
    				if((appSettingListDB.iterator().equals(currObj.getSettingKey())))
    ed anche con
    codice:
    appSettingListDB.contains(currObj.getSettingKey()
    senza nessun risultato. Potreste illuminarmi? dove sbaglio?Grazie a tutti in anticipo

    Salvatore
    Giuly Sei La Mia Vita

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Hai 3 metodi che ti tornano utili:

    1. equals, da implementare per il tuo bean
    2. hashcode, da implementare per il tuo bean

    questi due metodi ti dicono se due oggetti sono uguali oppure meno. Attento che hashcode differenti possono avere equals true, quindi devono valere entrambi per avere la certezza dell'uguaglianza.

    3. contains, riferito alla collection, che torna true o false a seconda se il bean è contenuto o meno. Questo ovviamente è determinato usando i due metodi sopra citati.

    Ti consiglio di dare un'occhio alla teoria delle collection, quanto ti ho riassunto è ben documentato
    RTFM Read That F*** Manual!!!

  3. #3
    Grazie la tua risp è stata utilissima, come sempre. Mi documenterò sui metodi suggeriti da te. Grazie ancora!
    Giuly Sei La Mia Vita

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da valia
    Attento che hashcode differenti possono avere equals true
    No: questo violerebbe il contratto fra equals() e hashCode(); se due oggetti hanno equals() true, allora devono produrre lo stesso hashCode(). Non è vero il viceversa, ovvero due oggetti possono produrre lo stesso hashCode() e, ciò nonostante, avere equals() false.

    Dalla documentazione di equals() in Object
    Note that it is generally necessary to override the hashCode method whenever this method is overridden, so as to maintain the general contract for the hashCode method, which states that equal objects must have equal hash codes.
    Solo per precisazione.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Originariamente inviato da LeleFT
    No: questo violerebbe il contratto fra equals() e hashCode(); se due oggetti hanno equals() true, allora devono produrre lo stesso hashCode(). Non è vero il viceversa, ovvero due oggetti possono produrre lo stesso hashCode() e, ciò nonostante, avere equals() false.

    Solo per precisazione.

    Ciao.
    Grazie, preciso come sempre. Mi confondo quando vado a memoria, non ho riletto la documentazione.
    Prima o poi mi entrerà in testa (almeno spero!!)
    RTFM Read That F*** Manual!!!

  6. #6
    Grazie ad entrambi!
    ho deciso però di cambiare strategia ed utilizzare due HashMap cosi da effettuare il cotnrollo sulla chiave, ed in caso andare ad effettuare il cotnrollo sul value(che in questo caso è il mio bean). Grazie ancora!
    Giuly Sei La Mia Vita

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    Uhmmm non cambia il succo.
    La condizione sulla chiave è la stessa, oltretutto deve essere univoca (Altrimenti perdi dati).
    Se tu univocamente sai identificare l'oggetto, che bisogno hai di ripassare per la ricerca tra i valori della mappa?
    RTFM Read That F*** Manual!!!

  8. #8
    le due HashMap contengono l'una oggetti che prendo da un DB, l'altra da un file XML. effettuo il controllo principalmente sulla chiave, ed in caso sul suo valore(per verificare che siano allineate entrambe le mappe). In questo modo evito di ciclare l'ArrayList ad ogni controllo per la verifica della chiave, semplificando il tutto con il metodo containsKey(). Il principio è lo stesso cmq...
    Giuly Sei La Mia Vita

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    allora un piccolo trucchetto, se tu devi comunque reperire i due oggetti e confrontartli, non fare containsKey, ma direttamente

    codice:
    Object obj = mappa.get(key); 
    
    if (obj == null) {
    // elemento non contenuto
    }
    in questo modo hai evitato di ciclare 2 volte sul set di chiavi, la prima volta per sapere se hai la chiave, la seconda per prelevarla.

    Diciamo che alla fine è una piccola ottimizzazione, che su tabelle grandi e ripetuta tante volte ti porta ad avere un piccolo miglioramento delle prestazioni (pena un confronto a null ma credimi in quelle condizioni meglio quello che un doppio ciclo)
    RTFM Read That F*** Manual!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.