Mike
Mike

Reputation: 2339

removing element from list

I have 2 lists, and depending on a parameter I remove an element from 1 of the 2 lists. I then loop through the lists for additional processing. However even though the list has lost 1 element, the list.size() is still the same causing a java.lang.IndexOutOfBoundsException. Is there anything I can do to fix this?

    System.out.println(high_list_price.size());

    if(first_hit.equals("low")){
        high_list_date.remove(high_list_date.size()-1);
        high_list_price.remove(0);
        high_list_percent.remove(0);
    }
    if(first_hit.equals("high")){

        low_list_date.remove(low_list_date.size()-1);
        low_list_price.remove(0);
        low_list_percent.remove(0);
    }

    System.out.println(high_list_price.size());

    for(int tt = 0;tt < low_list_date.size();tt++){
        System.out.println(low_list_date.get(tt)+"|"+low_list_price.get(tt));
    }

    for(int ii = 0; ii < high_list_date.size();ii++){
        System.out.print(high_list_date.get(ii)+"|");
        System.out.println(+high_list_price.get(ii));
    }

high_list_price.size() = 51 both before and after the .remove, yet high_list_date.size() goes from 51 to 50, why is that?

Upvotes: 1

Views: 219

Answers (3)

Jim Kiley
Jim Kiley

Reputation: 3652

As an addition to the valid options provided by @z5h there, consider using the Iterator interface, which includes a remove() method that removes the item from the underlying collection without causing the kinds of problems that using Collection.remove() causes.

Using Iterator might help you walk through your collections in a more readable fashion, as well.

Upvotes: 1

Mark Bolusmjak
Mark Bolusmjak

Reputation: 24399

If you iterate through ArrayLists backwards, you can delete the current element without worrying about what comes after.
Another option is to iterate through, make a list of things to delete, then delete those elements form the original list.

Upvotes: 2

最白目
最白目

Reputation: 3644

you may want to use an ArrayList instead of an plain array. It provides additional functions like remove(Object o)

Upvotes: 0

Related Questions