정수 값을 저장하는 ArrayList가 있습니다. 이 목록에서 최대 값을 찾아야합니다. 예를 들어 arrayList 저장 값이 다음 10, 20, 30, 40, 50
과 같다고 가정하면 최대 값은 다음 과 같습니다 50
.
최대 값을 찾는 효율적인 방법은 무엇입니까?
@ 편집 : 방금 확실하지 않은 솔루션을 찾았습니다.
ArrayList<Integer> arrayList = new ArrayList<Integer>();
arrayList.add(100); /* add(200), add(250) add(350) add(150) add(450)*/
Integer i = Collections.max(arrayList)
가장 높은 값을 반환합니다.
각 값을 비교하는 또 다른 방법 selection sort or binary sort algorithm
답변
를 사용하여 Collections.max에 대해 충분한
Javadoc을 통해Collections API
원하는 것을 쉽게 달성하고 효율적으로 읽을 수 있습니다.
Collections.max(arrayList);
주어진 요소의 자연 순서에 따라 주어진 컬렉션의 최대 요소를 반환합니다. 컬렉션의 모든 요소는 Comparable 인터페이스를 구현해야합니다.
답변
이 질문은 거의 1 년이되었지만 객체에 대한 사용자 정의 비교기를 만들면 객체의 배열 목록에 Collections.max를 사용할 수 있음을 알았습니다.
import java.util.Comparator;
public class compPopulation implements Comparator<Country> {
public int compare(Country a, Country b) {
if (a.getPopulation() > b.getPopulation())
return -1; // highest value first
if (a.getPopulation() == b.Population())
return 0;
return 1;
}
}
ArrayList<Country> X = new ArrayList<Country>();
// create some country objects and put in the list
Country ZZ = Collections.max(X, new compPopulation());
답변
public int getMax(ArrayList list){
int max = Integer.MIN_VALUE;
for(int i=0; i<list.size(); i++){
if(list.get(i) > max){
max = list.get(i);
}
}
return max;
}
내 이해에서 이것은 기본적으로 Collections.max () 가하는 일이지만 목록은 일반적이므로 비교자를 사용합니다.
답변
우리는 단순히 사용 Collections.max()
하고 Collections.min()
방법을 사용할 수 있습니다 .
public class MaxList {
public static void main(String[] args) {
List l = new ArrayList();
l.add(1);
l.add(2);
l.add(3);
l.add(4);
l.add(5);
System.out.println(Collections.max(l)); // 5
System.out.println(Collections.min(l)); // 1
}
}
답변
Integer 클래스는 Comparable을 구현하므로 Integer 목록의 최대 값 또는 최소값을 쉽게 얻을 수 있습니다.
public int maxOfNumList() {
List<Integer> numList = new ArrayList<>();
numList.add(1);
numList.add(10);
return Collections.max(numList);
}
클래스가 Comparable을 구현하지 않고 max 및 min 값을 찾아야하는 경우 자체 Comparator를 작성해야합니다.
List<MyObject> objList = new ArrayList<MyObject>();
objList.add(object1);
objList.add(object2);
objList.add(object3);
MyObject maxObject = Collections.max(objList, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
if (o1.getValue() == o2.getValue()) {
return 0;
} else if (o1.getValue() > o2.getValue()) {
return -1;
} else if (o1.getValue() < o2.getValue()) {
return 1;
}
return 0;
}
});
답변
Comparator.comparing
Java 8에서는 람다를 사용하여 콜렉션이 향상되었습니다. 따라서 다음을 사용하여 max 및 min을 찾을 수 있습니다 Comparator.comparing
.
암호:
List<Integer> ints = Stream.of(12, 72, 54, 83, 51).collect(Collectors.toList());
System.out.println("the list: ");
ints.forEach((i) -> {
System.out.print(i + " ");
});
System.out.println("");
Integer minNumber = ints.stream()
.min(Comparator.comparing(i -> i)).get();
Integer maxNumber = ints.stream()
.max(Comparator.comparing(i -> i)).get();
System.out.println("Min number is " + minNumber);
System.out.println("Max number is " + maxNumber);
산출:
the list: 12 72 54 83 51
Min number is 12
Max number is 83
답변
정렬되지 않은 목록에서 최대 값을 찾는 특히 효율적인 방법은 없습니다. 모든 값을 확인하고 가장 높은 값을 반환하면됩니다.