2014-10-06 1 views
5

Comparator오렌지 과일을 처음 사용하는 방법을 알고 싶었던 post을 확인했습니다. 포스트 toString 메소드 그렇게 없어진에서 나는 포스트에 주어진 대답했다Arrays.parallelSort vs Collections.sort

@Override 
public String toString(){ 
    return fruitName +" " + fruitDesc; 
} 

내 코드에 추가

사용 Collection.sort

Collections.sort(fruits, new Comparator<Fruit>() { 
     @Override 
     public int compare(Fruit o1, Fruit o2) { 
      if (o1.getFruitName() != null && o1.getFruitName().equalsIgnoreCase("orange")){ 
       return -1; 
      } 

      if (o2.getFruitName() != null && o2.getFruitName().equalsIgnoreCase("orange")){ 
       return 1; 
      } 

      return o1.getFruitName().compareTo(o2.getFruitName()); 
     } 
    }); 

출력 :

Orange Orange description 
Apple Apple description 
Banana Banana description 
Pineapple Pineapple description 
Pineapple Pineapple description 
Apple Apple description 
Orange Orange description 
Banana Banana description 

,321 : 나는

read more here

Arrays.parallelSort 코드

Fruit[] arrayFruits = fruits.stream().toArray(Fruit[]::new); 
Arrays.parallelSort(arrayFruits, (Fruit o1, Fruit o2) -> { 
    if (o1.getFruitName() != null && o1.getFruitName().equalsIgnoreCase("orange")){ 
     return -1; 
    } 
    if (o2.getFruitName() != null && o2.getFruitName().equalsIgnoreCase("orange")){ 
     return 1; 
    } 
     return o1.getFruitName().compareTo(o2.getFruitName()); 
    }); 

출력 사용에 대한 좋은 물건을 말씀 드리 지요하지 Arrays.parallelSort하는 이유는 6,510,403,210을 생각했다 0

저에게 정렬은 왜 다른 대답 양식 다른 방법을 정렬입니까?

+0

이러한 [link1] (http://stackoverflow.com/questions/17328077/difference-between-arrays-sort-and-arrays-parallelsort) 및 [link2] (http://java.dzone.com/ articles/arrayssort-versus) 도움이됩니다. –

+0

@ ankur-singhal 감사합니다. 그러나 이미 확인했습니다. –

+0

@KickButtowski : 프로그램을 올바르게 실행 했습니까? 값을 입력하는 순서와 관계없이 '오렌지색'이 가장 먼저 배치됩니다. –

답변

4

TryJava8에서 프로그램을 실행하면 올바르게 정렬 된 배열을 얻을 수 있습니다. 아마도 출력 (arrayFruits) 대신 입력 (fruits)을 인쇄했다고 생각합니다. 이것은 흥미로운 주제를 열었습니다. 일반적으로 정렬 알고리즘이 전체 순서를 보장하지는 않기 때문입니다. 일반적으로 대형 배열의 경우 두 요소가 동일하지만 동일하지 않은 경우 (예 : 동일한 레코드에 대한 다른 포인터) 알고리즘이 특정 순서를 보장하지는 않습니다. 이것은 넥타이가 일반적으로 다른 알고리즘에 의해 다르게 깨져 있다고 말했다.

주문 관계가 있어야한다 :

  • 재귀 : 모든 항목 자체 같아야한다 (당신은 더 나은 것 같아요 0를 반환)
  • A는 방법은 순서 관계의 제약을 만족해야 비교

  • 비대칭 : 이 및 bA, AB과 같거나 작습니다.
  • 전이하십시오 B가 및 B 이하인 경우 C, C 이하인 이하이다. 정렬 알고리즘의 대부분

O (N 로그 n) 시간 복잡도를 제공하여 (그들을 확인하지 않는 것) 암시 적으로이 제약 조건을 가정합니다. 조건이 성립하지 않으면 알고리즘의 구현에 따라 다른 결과를 얻습니다.

병렬 정렬은 MergeSort 알고리즘을 사용하고 기본 정렬은 QuickSort 알고리즘을 사용하기 때문에 두 알고리즘의 동작이 다릅니다.

관련 주제 : 대부분의 정렬 알고리즘은 안정적이지 않습니다. 두 항목이 "동일"하다 말해, 다음이 경우사전이 배치되었다는 것을 보장되지 얻어진 배열 '원본 배열사전이 배치 될 '.

+0

결과는 동일해야합니다. 게시물을 기반으로, 오렌지 처음으로 항상 있어야합니다 –

+0

+1 멋진 정보를 –

+1

좋아,하지만 큰 배열에 대해, "동일"(하지만, 다른 포인터와 같은 항목) 수있는 항목을 유의하십시오 섞여 야합니다 ... –

관련 문제