[Domanda] Array e Java

Salve a tutti, mentre scrivevo il mio ultimo plugin (secreto é_é ) ho trovato la necessità di verificare se un array contiene un dato elemento. Probabilmente in un giorno tranquillo ci riuscirei, ma in questi giorni, col natale alle porte è tutto più incasinato (e l'"ordine" nel mio plugin non aiuta). Specifico che è un array di stringhe (i nomi dei player, visto che ho letto che memorizzare gli oggetti player può dare problemi).

Grazie !
"È come se ci fossimo dimenticati chi siamo, Donald: esploratori, pionieri. Non dei guardiani."

"Un tempo per la meraviglia alzavamo al cielo lo sguardo sentendoci parte del firmamento, ora invece lo abbassiamo preoccupati di far parte del mare di fango."

- Cooper (Interstellar)
Usa le liste...
Comunque se proprio vuoi gli arrays fai
Codice:
if (Arrays.asList(l'ARRAY).contains("elemento"))blabla.bla();
(23/12/2013, 18:15)BaluMonster ha scritto: Usa le liste...
Comunque se proprio vuoi gli arrays fai
Codice:
if (Arrays.asList(l'ARRAY).contains("elemento"))blabla.bla();


Differenza tra array e liste ? Linka balu <3
"È come se ci fossimo dimenticati chi siamo, Donald: esploratori, pionieri. Non dei guardiani."

"Un tempo per la meraviglia alzavamo al cielo lo sguardo sentendoci parte del firmamento, ora invece lo abbassiamo preoccupati di far parte del mare di fango."

- Cooper (Interstellar)
(23/12/2013, 18:29)MCinemaGamer ha scritto:
(23/12/2013, 18:15)BaluMonster ha scritto: Usa le liste...
Comunque se proprio vuoi gli arrays fai
Codice:
if (Arrays.asList(l'ARRAY).contains("elemento"))blabla.bla();


Differenza tra array e liste ? Linka balu <3
Più metodi
(23/12/2013, 18:46)BaluMonster ha scritto: Più metodi

(23/12/2013, 18:29)MCinemaGamer ha scritto: Linka balu <3
"È come se ci fossimo dimenticati chi siamo, Donald: esploratori, pionieri. Non dei guardiani."

"Un tempo per la meraviglia alzavamo al cielo lo sguardo sentendoci parte del firmamento, ora invece lo abbassiamo preoccupati di far parte del mare di fango."

- Cooper (Interstellar)
http://lmgtfy.com/?q=java+array+vs+list
1 utente apprezza questo post
(23/12/2013, 18:49)BaluMonster ha scritto: http://lmgtfy.com/?q=java+array+vs+list

[Immagine: Watch-out-we-got-a-badass-over-here-meme.png]
"È come se ci fossimo dimenticati chi siamo, Donald: esploratori, pionieri. Non dei guardiani."

"Un tempo per la meraviglia alzavamo al cielo lo sguardo sentendoci parte del firmamento, ora invece lo abbassiamo preoccupati di far parte del mare di fango."

- Cooper (Interstellar)
Se fai Arrays.asList ogni volta trasforma l'array in una lista, non è molto efficiente. Usa un ciclo for(String s : array) { ... }
O usa direttamente una list Tongue
Anche, la performance non cambia usando list.contains(...)
(23/12/2013, 20:20)filoghost ha scritto: Anche, la performance non cambia usando list.contains(...)

Si si filo, grazie della risposta, ma ormai ho già convertito tutti i miei plugin ad ArrayList xD
"È come se ci fossimo dimenticati chi siamo, Donald: esploratori, pionieri. Non dei guardiani."

"Un tempo per la meraviglia alzavamo al cielo lo sguardo sentendoci parte del firmamento, ora invece lo abbassiamo preoccupati di far parte del mare di fango."

- Cooper (Interstellar)
allora.. quante volte dovrai inserire in questo array?
quante volte dovrai togliere?
quante volte dovrai cercare?

le liste te le consiglio solo se fai ben poche ricerche e rimangono sempre sequenziali.

ricorda che cancellare implica anche ricercare un elemento 


Se fai pochi inserimenti e tante ricerche
- ordina l'array
- magari indicizzalo anche o organizzalo a pagine, le ricerche saranno 100 volte più veloci
- rircerche DICOTOMICHE, non sequenziali (programmazione di base xD)

se fai poche ricerche e tanti inserimenti/cancellazioni
- tieni l'array disordinato oppure ordina le pagine, ma tieni gli elementi disordinati... velocizzi entrambe le operazioni



come organizzare a pagine? il metodo più veloce è (lo scrivo in pseudo codice):

String[] myarray    > DIVENTA


class myPage{
    char firstLetter
    String[] mySubArray
}

class myArrManager{

     myPage[] myarray

     void add(string elem)
     {
          myPage temp = searchpag(elem)
      
          if(!searchin(elem, temp.mySubArray)){
              temp.mySubArray.add(elem)
              temp.mySubArray.sort()
          }
      }

     bool search(String elem)
     {
          myPage temp = searchpag(elem)
          return searchIn(elem, temp.mySubArray)
     }

}

in modo che l'array non sia più di stringhe (1000 elementi), ma si divida in 40 array ricercabili facilmente (e soprattutto velocemente)! Io ti ho fatto l'esempio più semplice, con pagine che si basano sulla prima lettera della stringa...
@andreaci  -  italian-minecraft.net
(24/12/2013, 15:17)andreaci ha scritto: allora.. quante volte dovrai inserire in questo array?
quante volte dovrai togliere?
quante volte dovrai cercare?

le liste te le consiglio solo se fai ben poche ricerche e rimangono sempre sequenziali.

ricorda che cancellare implica anche ricercare un elemento 


Se fai pochi inserimenti e tante ricerche
- ordina l'array
- magari indicizzalo anche o organizzalo a pagine, le ricerche saranno 100 volte più veloci
- rircerche DICOTOMICHE, non sequenziali (programmazione di base xD)

se fai poche ricerche e tanti inserimenti/cancellazioni
- tieni l'array disordinato oppure ordina le pagine, ma tieni gli elementi disordinati... velocizzi entrambe le operazioni



come organizzare a pagine? il metodo più veloce è (lo scrivo in pseudo codice):

String[] myarray    > DIVENTA


class myPage{
    char firstLetter
    String[] mySubArray
}

class myArrManager{

     myPage[] myarray

     void add(string elem)
     {
          myPage temp = searchpag(elem)
      
          if(!searchin(elem, temp.mySubArray)){
              temp.mySubArray.add(elem)
              temp.mySubArray.sort()
          }
      }

     bool search(String elem)
     {
          myPage temp = searchpag(elem)
          return searchIn(elem, temp.mySubArray)
     }

}

in modo che l'array non sia più di stringhe (1000 elementi), ma si divida in 40 array ricercabili facilmente (e soprattutto velocemente)! Io ti ho fatto l'esempio più semplice, con pagine che si basano sulla prima lettera della stringa...

Ho fatto che usare le liste. Per quello che devo fare sono molto comode e versatili Smile grazie comunque della risposta !
"È come se ci fossimo dimenticati chi siamo, Donald: esploratori, pionieri. Non dei guardiani."

"Un tempo per la meraviglia alzavamo al cielo lo sguardo sentendoci parte del firmamento, ora invece lo abbassiamo preoccupati di far parte del mare di fango."

- Cooper (Interstellar)
(24/12/2013, 15:17)andreaci ha scritto: allora.. quante volte dovrai inserire in questo array?
quante volte dovrai togliere?
quante volte dovrai cercare?

le liste te le consiglio solo se fai ben poche ricerche e rimangono sempre sequenziali.

ricorda che cancellare implica anche ricercare un elemento 


Se fai pochi inserimenti e tante ricerche
- ordina l'array
- magari indicizzalo anche o organizzalo a pagine, le ricerche saranno 100 volte più veloci
- rircerche DICOTOMICHE, non sequenziali (programmazione di base xD)

se fai poche ricerche e tanti inserimenti/cancellazioni
- tieni l'array disordinato oppure ordina le pagine, ma tieni gli elementi disordinati... velocizzi entrambe le operazioni



come organizzare a pagine? il metodo più veloce è (lo scrivo in pseudo codice):

String[] myarray    > DIVENTA


class myPage{
    char firstLetter
    String[] mySubArray
}

class myArrManager{

     myPage[] myarray

     void add(string elem)
     {
          myPage temp = searchpag(elem)
      
          if(!searchin(elem, temp.mySubArray)){
              temp.mySubArray.add(elem)
              temp.mySubArray.sort()
          }
      }

     bool search(String elem)
     {
          myPage temp = searchpag(elem)
          return searchIn(elem, temp.mySubArray)
     }

}

in modo che l'array non sia più di stringhe (1000 elementi), ma si divida in 40 array ricercabili facilmente (e soprattutto velocemente)! Io ti ho fatto l'esempio più semplice, con pagine che si basano sulla prima lettera della stringa...

Non c'è bisogno di complicarsi la vita, queste cose cambiano la performance solo se la lista è molto lunga e usi il metodo 1000 volte ogni secondo Smile
Discussioni simili
 
[Problema] Aiuto con Java
1 171
Risposta di simone36050
11/04/2018, 23:15
Risposta di ChildNeverDies
08/04/2018, 18:18
 
[Problema] java 7 a java 8
6 381
Risposta di _gjkf_
11/08/2017, 11:27
 
[Domanda] Java
4 389
Risposta di Lolok3221
06/06/2017, 14:39
Risposta di Ale99Big
18/01/2017, 20:29

Utente(i) che stanno guardando questa discussione: 1 Ospite(i)