简体   繁体   中英

program on arraylist java

System.out.println("Enter the appointment ID to see the full details :");
int y=in.nextInt();
int r;
for(r=0;r<count;r++)
{
    if(all.get(r).getID()==y)
    {
         all.get(r).display();
    }
}

I am using this code to retrieve the full details that have been entered using the get statement and display function. This is a small part of my program. I was wondering is there any other way to do it

A better way would be to use a HashMap<Integer,DetailsClass> instead of an ArrayList.

Then, instead of a loop, you'll just write :

HashMap<Integer,DetailsClass> map = new HashMap<>();

...

if (map.containsKey(y)) {
    DetailsClass details = map.get(y);
    details.display();
}

This makes the code simpler and more efficient, since searching for a key in a HashMap takes expected constant time, while searching the List takes linear time.

If you must use an ArrayList , at least leave the loop once you find the object you were looking for :

int y=in.nextInt();
for(int r=0;r<count;r++)
{
    if(all.get(r).getID()==y)
    {
         all.get(r).display();
         return; // or break; depending on where this for loop is located
    }
}

Never loop over a List by index. You don't know what the internal implementation of the List is and looping might result on O(n^2) complexity.

I would suggest the following:

System.out.println("Enter the appointment ID to see the full details :");
final int y = in.nextInt();
for(final Thing thing : all) {
    if(thing.getID() == y) {
         thing.display();
    }
}

Or, if you can use Java 8, then:

all.stream()
        .filter(t -> t.getID() == y)
        .findFirst()
        .ifPresent(Thing::display);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM