3.12 Comparable 인터페이스 구현 고려

1470 단어 comparable
TreeMap, TreeSet, Arrays, Collections는Comparable 인터페이스를 실현한 대상의compareTo () 를 호출하여 자연적으로 정렬할 수 있습니다.compareTo()를 실현하는 것은 equals()의 기본 원칙을 실현하는 것과 유사하며, 다른 점은 다음과 같다.
 
1. 들어오는 비교 대상의 유형이 현재 대상과 다르면 ClassCastException을 던져야 한다
 
2.x.compareTo(y)==0이면 x.equals(y)==true
 
BigDecimal이 규칙 2를 준수하지 않으면 다음 테스트가 통과됩니다. 이로 인해 다음 2개의 BigDecimal 대상은 한HashSet 대상에 동시에 넣을 수 있습니다(equals()가false로 되돌아오기 때문에). 그러나 그 중 하나만TreeSet에 넣을 수 있습니다(compareTo(왜냐하면).
	@Test
	public void testCompareTo(){
		BigDecimal decimal1=new BigDecimal("1.0");
		BigDecimal decimal2=new BigDecimal("1.00");
		
		Assert.assertFalse(decimal1.equals(decimal2));
		Assert.assertTrue(decimal1.compareTo(decimal2)==0);
		
		Set<BigDecimal> hashSetContainer=new HashSet<BigDecimal>();
		Set<BigDecimal> treeSetContainer=new TreeSet<BigDecimal>();
		
		hashSetContainer.add(decimal1);
		hashSetContainer.add(decimal2);
		
		treeSetContainer.add(decimal1);
		treeSetContainer.add(decimal2);
		
		Assert.assertTrue(hashSetContainer.size()==2);
		Assert.assertTrue(treeSetContainer.size()==1);
	}

 
 
 
주의해야 할 점:
1. 정수 int i, j 2개에 대해.i는 최대 정수이고 j는 최소 음정수이다.비교할 때 i-j를 사용하면 저장이 넘치고 음수를 되돌려 비교 결과가 정확하지 않을 수 있다(i가 j보다 크기 때문에 정수를 되돌려야 한다)
 
2. Apache Commons의 CompareToBuilder를 사용한 비교 논리 권장

좋은 웹페이지 즐겨찾기