I have created a list of objects and have people added to it:
ArrayList<Person> peeps = new ArrayList<Person>();
peeps.add(new Person("112", "John", "Smith"));
peeps.add(new Person("516", "Jane", "Smith"));
peeps.add(new Person("114", "John", "Doe"));
I am trying to figure out how to remove the person from the list by ID number. So if I wanted to remove the person with the ID number 114 but didn't now where it fell in the list, how would I?
There are many ways to tackle this.
Using Java8:
Note that this is equivalent to linear search and will take
O(n)
time. If this operation will be repeated frequently it is recommended to use aHashMap
in order to speed things up toO(1)
.Alternatively using a sorted list would also do the trick, but require
O(log n)
time.If you are going to be using an ArrayList, the the only way is to go through the entire list, looking at each person, and seeing it their id number is 114. For larger datasets, this is not going to efficient and should be avoided.
If you can change your data structure, then some sort of Map would be better (HashMap is typically a good choice). You could have the id number as a "key" and then associate it with each person. Later you can query the Map by key. The con is you can only have one value as a key, so you can't have say both name and id number keys
Edit:
An more efficient way to do use an ArrayList would be to keep it sorted by id number. Then you can use something like Collections.binarySearch() to quickly access the elements by id number. The con is is that it is expensive to remove from/insert into a sorted array, as everything greater the element has to be moved. So if you are going to be doing relatively few changes compared to the number of reads, this might be viable
You first need to have a working
equals
in your Person class (which you should). Then you can just useList#indexOf
andList#remove
. For example:(assuming the Person ID is unique).
Alternatively if your list is an
ArrayList
you can useArrayList#remove(Object)
:If you're using Java 8, you can use Paul's solution.
iterate
in theArrayList
elements and remove the ones which match the string you want to remove: TheIterator remove
operations is safe and does not create aConcurrentModificationException