Hvordan fjerne objektet fra Arraylist

stemmer
0

Jeg har klasse med Arraylist lag og jeg vil fjerne laget som heter gratis;

så jeg prøvde:

 public void removeFree()
{

    for (int i = 0 ; i < numberOfTeams ; i++ )
    {
        if (this.getListOfTeams().get(i).getName() == FREE)
        {
            this.getListOfTeams().remove(i);
        }
        else
        {}
    }
}

Det gjør min app krasj.

Publisert på 11/02/2013 klokken 10:53
kilden bruker
På andre språk...                            


3 svar

stemmer
3

Bruk, er lik () metode for å kontrollere om to strenger ligger meningsfullt like. ==Operatøren bare kontrollerer om to referanse variabler refererer til samme objekt.

    if (this.getListOfTeams().get(i).getName() == "FREE")

bør være

    if (this.getListOfTeams().get(i).getName().equals("FREE"))

Også å legge til mer, selv om du bruker equals () du vil få ConcurrentModificationExceptionnår du fjerner elementer fra Arraylist mens gjentar over det. du må bruke en iterator og fjerne elementer fra det heller.

Iterator<Team> itr = getListOfTeams.iterator();
while(itr.hasNext()){
  if (itr.next().getName().equals("FREE"))
        {
            itr.remove();
        }
        else
        {}
}
}
Svarte 11/02/2013 kl. 10:54
kilden bruker

stemmer
2

For å fjerne et element fra en Liststund itera det, er det sikrere å bruke en Iteratorsammen med removemetode:

for (Iterator it = getListOfTeams().iterator;it.hasNext();) {
    String name = it.next();
    if ("FREE".equals(name) {
        it.remove();
    }
    else{}
}

Vær oppmerksom på hvordan String verdi sammenligning i Java bør vanligvis gjøres ved hjelp av String.equals()metoden. ==er referanse likhet operatør. Se Hvordan sammenligner jeg strenger i Java?

Svarte 11/02/2013 kl. 10:57
kilden bruker

stemmer
0

Du prøver å fjerne et element mens du looping samme Arraylist. Du trenger å klone første, gjenta det klonede listen, og deretter slette elementer i den første pekeren.

så tenk på dette:

List<Object> arrayToIterate = getListOfTeams().clone();
for (int i = 0 ; i < numberOfTeams ; i++ )
{
    if (tarrayToIterate.get(i).getName().equals("FREE"))
    {
        this.getListOfTeams().remove(i);
    }
    else
    {}
}

Også du sammenligner en streng med == stedet for lik.

Svarte 11/02/2013 kl. 10:56
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more