2012-03-09 3 views
0

Collection (또는 심지어 Iterable)이 클래스 계약에 따라 주문되었는지 확인하는 방법을 찾고 있습니다.Java Iterable이 계약에 따라 주문되었는지 확인

이미 구아바 메서드를 알고 있습니다. Ordering.natural().isOrdered(myCollection) 그러나이 메서드는 컬렉션 내의 값이 정렬되어 있는지 확인하기 때문에 내 필요와 관련이 없습니다. 즉,하지 내가 결정해야 할 무엇, 내가 무엇을 갖고 싶어하면이처럼 행동하는 isSorted 방법 : 등

isSorted(new HashSet()) -> false 
isSorted(new ArrayList()) -> true 

...

내가 보통을 선택하여 구현 될 것이라고보고 있어요 컬렉션의 클래스를 만들고, 컬렉션의 상태를 계약하는 콜렉션의 일종의 참조 테이블과 비교하여이 컬렉션에 대해서만 true를 반환합니다.

일부 라이브러리에 이미 이와 같은 것이 있습니까?

+7

'ArrayList'는 정렬되지 않고 정렬됩니다. –

+0

이 클래스 (또는 메소드)는 순서를 알지 못하면 어떻게 알 수 있습니까? 1. 해당 클래스의 JavaDoc 2. 해당 클래스의 소스 코드 (및 분석) 또는 3. 이미 저장된 값의 맵 회원 (새로 정의 된 익명의'Collection'과 잘 작동하지 않을 것입니다)? –

+0

예, "계약서로 주문한 수업의 컬렉션입니까?"라는 의미입니다. 이러한 메소드를 구현하려면 계약에 따라 정렬 된 "신뢰할 수있는"클래스 테이블을 수집하고 해당 클래스에 대해서만 true를 반환합니다 (물론 참조에 포함 된 정확한 메소드를 지정하십시오 테이블을이 "isOrdered"메소드의 계약으로 사용) –

답변

0

다음을 수행하여 컬렉션이 정렬되도록 정의되었는지 확인할 수 있습니다.

collection instanceof SortedSet 
+0

실제로 내가 원하는 메소드를 구현할 수있는 방법이지만, 이미 완료되었는지 여부와 그 유형에 대한 포괄적 인리스트를 가지고 궁금해하고 있습니다. 체크. –

0

정렬 된 컬렉션에는 List, SortedSet 및 SortedMap의 세 가지 인터페이스가 있습니다. 클래스가 그 중 하나를 구현하는지 확인할 수 있습니다.

+0

그러나이 세 가지 인터페이스 중 하나를 구현하지 않고 Collection을 구현하고 계약에 따라 주문 된 클래스도 있습니다. 예를 들어'LinkedHashSet'입니다. –

0

아니요, 이것은 모든 라이브러리에 존재하지 않으며 그 이유가 있습니다.

해당 라이브러리는 주위를 돌아 다니는 모든 컬렉션 유형을 알아야합니다. 아파치 코 몬즈 컬렉션을 사용한다면, 그것들 모두에 대해 알아야 할 것이다. 당신이 구아바를 사용한다면, 그것들 모두에 대해 알아야 할 것입니다. 누군가가 따라 와서 새로운 컬렉션 유형을 도입하면, 주문한 경우에도 해당 유형을 거부하게됩니다.

다른 콜렉션 유형이있을 수있는 라이브러리가 무엇인지 알 수없는 라이브러리에서이 메소드를 제공하는 것은 이치에 맞지 않습니다.

최종 응용 프로그램에서는 이미 구현 한 경험적 기법을 사용하여 응용 프로그램을 구현하는 것이 좋습니다.

실제로이 방법으로 무엇을 하려는지 알면 도움이 될 수 있습니다.