트리 맵에서 0,1,2,3 등의 오름차순으로 요소를 정렬했습니다.이 요소는 0,1,2 등의 값에 따라 정렬됩니다. values.I 그들을 비교하는 비교기를 사용했습니다. 나는 map.How의 끝에 0 값으로 요소를 넣으려면 제외 하고이 순서를 유지하려면 어떻게해야합니까? 당신은 "말"에 요소를 추가 할 수 있도록 완전히 무의미한 것, 그래서TreeMap의 끝 부분에 요소를 넣으십시오.
1
A
답변
5
0을 처리 할 수 있습니다, 당신의 트리 맵에도, 정렬 TreeMaps는 그렇게 작동하지 않지만.
당신이 할 수있는 일은 "0"이 가장 큰 요소라고 결정하는 방식으로 Comparator를 구성하는 것이므로 모든 "0"을 맨 끝으로 정렬 할 것입니다. 끝에있는 "0"의 순서는 정렬 알고리즘에 따라 임의적입니다.
1
당신은 당신의 비교기를 수정하고 이미 말했듯이 가장 많은
1
값이 아닌 키이 아닌 맵 정렬을 원한다는 것을 깨달았습니다. 비교기는 좀 더 복잡하게 만드는 값을 얻지 못합니다.
가private static Map<String, Integer> helper = new HashMap<String, Integer>();
private static Comparator<String> myComparator
= new Comparator<String>() {
public int compare(String s1, String s2) {
Integer i1 = helper.get(s1);
Integer i2 = helper.get(s2);
if (i1 == 0) return 1; // i1 > i2
if (i2 == 0) return -1; // i1 < i2
return i1.compareTo(i2);
}
};
public static void main (String[] args) throws java.lang.Exception {
helper.put("minus one", -1);
helper.put("zero", 0);
helper.put("one", 1);
helper.put("very much", Integer.MAX_VALUE);
helper.put("nothing", 0);
helper.put("null", 0);
Map<String, Integer> map = new TreeMap<String, Integer>(myComparator);
map.putAll(helper);
for(Map.Entry<String, Integer> entry:map.entrySet()) {
System.out.printf("%s = %s%n", entry.getKey(), entry.getValue());
}
}
출력은 : 다음 새로운 접근법은 모든 값을 수집하여 키 값을 조회하도록 상기 비교기에 의해 사용될 수있는 초 (정렬되지 않은)지도 사용
minus one = -1
one = 1
very much = 2147483647
nothing = 0
zero = 0
null = 0
관련 문제
- 1. 줄의 시작/끝 부분을 잘라내어 끝/끝 부분에 붙이십시오.
- 2. UILabel 정렬 : 끝 부분에 "..."표시
- 3. jPlayer를 트랙 끝 부분에 유지하십시오.
- 4. 함수의 끝 부분에 도달하지 못했습니다.
- 5. 빔 : 라인 끝 부분에 삽입
- 6. 끝 부분에 쉼표 제거 루핑
- 7. 라이트 박스 디스플레이로드 중 페이지 끝 부분에
- 8. 배열 끝 부분에 매개 변수를 추가하려면 어떻게합니까?
- 9. 테이블 셀의 시작 부분에 div를 넣으십시오.
- 10. <em>및</em>을 각 키워드의 시작 부분과 끝 부분에 넣으십시오.
- 11. 발생 - TreeMap의
- 12. 다차원 배열의 끝 부분에 값 추가
- 13. 텍스트 상자의 텍스트 끝 부분에 포커스가 있습니다
- 14. PolylineConnection의 끝 부분에 빈 화살표를 만드시겠습니까?
- 15. 나는 머리 태그의 끝 부분에 CSS를 붙입니다.
- 16. 끝 부분에 .php를 삽입하지 않고 페이지를 만드시겠습니까?
- 17. 줄 끝 부분에 붙여 넣을 방법이 있습니까?
- 18. matlab 처음과 끝 부분에 공백을 제거하는 방법?
- 19. htaccess를 tld로 제한하거나 끝 부분에 위치 추가
- 20. 스크립트 끝 부분에 예기치 않은 토큰이 있습니다.
- 21. Exrtact 결과가 행/행의 끝 부분에 표시됩니다
- 22. 페이지의 끝 부분에 링크를 놓으십시오 (Drupal)
- 23. 줄 끝 부분에 일치하지 않는 공백을 찾습니다.
- 24. 텍스트 랩핑의 끝 부분에 공백을 추가 하시겠습니까?
- 25. 줄 끝 부분에 도트/화살표를 출력하는 방법
- 26. Toolstripitem은 항상 메뉴 끝 부분에 있습니다
- 27. 각 결과의 끝 부분에 변수를 추가하십시오.
- 28. Java에서 InputStream의 시작과 끝 부분에 문자 추가
- 29. 항목 ID를 MySQL 쿼리 끝 부분에 추가하십시오.
- 30. 문자열의 끝 부분에 더블을 추가하기 (C++)
그것을 당신이 한 일을하는 소리가 더 좋은 방법으로 이루어져야합니다. 예를 들어 '0'은 한 번만 나타날 수 있으므로 시작과 끝 부분에 나타나지 않습니다. 아마도 당신이해야 할 일을 분명히 할 수있을 것이고 더 간단한 해결책을 제시 할 수있을 것입니다. –
나는 어떤 것을 정렬하기 위해 비교자를 사용하고 0의 값도있다.하지만 0의 값을 원한다. 내가 원하는 것. # Peter Lawrey – Azfar
'0'을 사용하는 대신 왜 'Integer.MAX_VALUE'를 사용하지 않습니까? –