2012-10-08 4 views
3

ArrayList에서 가장 큰 값을 찾으려고하는 두 가지 다른 함수가 있습니다. 동일한 값을 반환하고 성능 시간을 반환하는 경우 처음 본 이후 두 개가 있습니다.ArrayList에서 가장 큰 값 찾기

그러나 그들은 동일한 값을 재현하지만 ArrayList의 마지막 값인 것처럼 보입니다. 나는 그것이 가치 대신 열쇠를 사용하고 있을지도 모른다고 생각한다.

코드가 아래에 있으며, 나는 그 단순한 실수라고 생각하지만 누군가 올바른 방향으로 나를 가리킬 수 있습니까?

double highest = fitnessArray.get(0); 

for (int s = 0; s <fitnessArray.size(); s++){ 
    if (fitnessArray.get(s)>highest) 
     highest=fitnessArray.get(s); 

} 

System.out.println("highest fitness = " + highest 
       + " indoexOf = " + fitnessArray.indexOf(highest)); 

double highestFitness; 

highestFitness = Collections.max(fitnessArray); 
System.out.println("lowest fitness 2 = " + highestFitness); 
+0

'indexOf()'호출은'get()'을 두 번 호출 할뿐만 아니라 100 % 중복됩니다. –

+0

코드가 잘된 것 같아서 시도해 보았고 정확한 값을주었습니다. 'fitnessArray'에는 무엇이 있습니까? –

+0

또한 for 루프 앞에 인덱스 0을 이미 확인 했으므로 for 루프는 인덱스 1에서 시작해야합니다. –

답변

1
당신이 가장 많은 것을 인덱스를 저장하는 경우 당신은 더 나은 운이있을 수 있습니다

에서 :

if (fitnessArray.size() > 0) { 
    double highest = fitnessArray.get(0); 
    int highestIndex = 0; 

    for (int s = 1; s < fitnessArray.size(); s++){ 
     double curValue = fitnessArray.get(s); 
     if (curValue > highest) { 
      highest = curValue; 
      highestIndex = s; 
     } 
    } 

    System.out.println("highest fitness = " + highest + " indoexOf = " + highestIndex); 
} 
+0

코드 목록이 비어 있으면 실패합니다. –

+0

아, 그래, 원래 예제에서 복사했습니다. 배열이 비어 있는지 미리 확인 중이라고 생각했습니다. –

+1

크기를 저장해야하며 항상 메서드를 호출하는 것은 아닙니다. 효과적인 Java에 관해서도 각각에 대해 preferrable입니다. – Christian

5

를 사용하여 기존의 API를

Collections.max(arrayList); 

import java.util.ArrayList; 
import java.util.Collections; 

public class Main { 

    public static void main(String[] args) { 

    ArrayList<Integer> arrayList = new ArrayList<Integer>(); 

    arrayList.add(new Integer("3")); 
    arrayList.add(new Integer("1")); 
    arrayList.add(new Integer("8")); 
    arrayList.add(new Integer("3")); 
    arrayList.add(new Integer("5")); 

    Object obj = Collections.max(arrayList); 
    System.out.println(obj); 
    } 
} 

Documentation

또한 나중에 정렬 된 목록이 필요합니다 경우

Collections.sort(arrayList); // Sort the arraylist 
arrayList.get(arrayList.size() - 1); //gets the last item, largest for an ascending sort 

두 번째 방법이 유용 할 수 있습니다 약간 더 솔루션으로 고려할 수 있습니다.

관련 문제