Collection
은 요소를 정렬하지만 중복을 제거하지 않아야합니다.중복을 허용하는 TreeSet 또는 TreeMap
나는 TreeSet
으로 갔다.
public boolean add(E e) { return m.put(e, PRESENT)==null; }
그리고 TreeMap에 내가 쓴
Comparators
compare
논리를 사용하여 중복을 제거합니다 TreeSet
이후
실제로 백업
TreeMap
에 값을 추가합니다Comparator
은 요소가 같은 경우 0 대신 1을 반환합니다. 따라서 동일한 요소의 경우TreeSet
이이Comparator
인 경우 중복을 덮어 쓰지 않고 정렬 만합니다.간단한
String
개체를 테스트했지만 맞춤 개체 집합이 필요합니다.public static void main(String[] args) { List<String> strList = Arrays.asList(new String[]{"d","b","c","z","s","b","d","a"}); Set<String> strSet = new TreeSet<String>(new StringComparator()); strSet.addAll(strList); System.out.println(strSet); } class StringComparator implements Comparator<String> { @Override public int compare(String s1, String s2) { if(s1.compareTo(s2) == 0){ return 1; } else{ return s1.compareTo(s2); } } }
이렇게 접근하는 것이 좋습니까? 아니면 더 좋은 방법입니까?
사실 나는 다음과 같은 클래스의 ArrayList를하는 데 문제
편집 :
class Fund { String fundCode; BigDecimal fundValue; ..... public boolean equals(Object obj) { // uses fundCode for equality } }
나는 모든이
fundCode
당신을 위해 충분 각 요소의 발생의 수를 유지시겠습니까? (즉, 실제 코드에는 완전히 동일한 복사본이 있거나 일부 차이점을 유지해야합니까? 예 : 대소 문자를 구별하지 않고 대소 문자를 보존하는 집합이나지도가 그 예입니다. –
이것은 세트. 정렬 된 목록이나 비슷한 것이 필요합니다. javadoc :'''Set는 중복 요소를 포함 할 수없는 콜렉션입니다 .''' 계약을 파기하는 것은 좋지 않습니다. – NeplatnyUdaj
http://stackoverflow.com/a/21974362/2736496 – aliteralmind