# java lists

how can I find the second highest value in a list of integers? and also the second lowest ?
###### Who is Participating?

x

Commented:
Hi djspinnet!
your solution won't work for the following list: 2, 1 ... sorry

my proposal is:

suppose the list contains at leas 2 members and in case when two members has the highest value, the second highest equals the highest :)

int max = ((Integer)list.next()).intValue();
int max2 = ((Integer)list.next()).intValue();
int mxc = max2;
while(true) {
if(mxc>=max) {
mx2 = max;
max = mxc;
} else if(mxc>max2) {
max2 = mxc;
}
if(!list.hasNextt()) {
break;
}
mxc = ((Integer)list.next()).intValue();
}

for the second lowest you just replace > with <

csaba
0

Commented:
to find the second highest,

declare two variables max and second_max

1) traverse the list
2) store the first integer in max
3) if the next int (let's call it x) is larger than max, assign second_max = max; and max = x;
4) continue traversing the whole list and performing the same operation
5) return second_low

same goes for second lowest, just change >= to <=
0

Commented:
If speed is not an issue, just sort the list and grab the 2nd and 2nd from last item from the list
Collections.sort(l);
small=l.get(1);
large=l.get(l.size()-2);
0

Commented:
actually, my solution did work - i implemented it once ;)
0

Commented:
To djspinnet:

Have you tried your algorithm with the list I mentioned? If yes, and the result was correct. you can accept the points offered.

I don't think so ...

Csaba
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.