-2

이 질문에는 이미 답변이 있습니다.

그래서 파일을 읽고 그 파일 내의 중복 수를 세지 않으면 안됩니다. 나는 상점 중복을 기울인다. 그런 다음 발생 순서에 따라 파일의 내용을 표시해야합니다.

지금까지 내 코드 :

    // use hashmap to store the values
    Map<String, Integer> myMap = new HashMap<>();

    // loop through
    for (String line = r.readLine(); line!=null; line = r.readLine()) {
        if (myMap.containsKey(line)) {
            myMap.put(line, myMap.get(line)+1);
        } else {
            myMap.put(line, 1);
        }
    }   

그들은 고유 한 키를 가지고 있기 때문에 맵에 저장하고 있습니다. 내가 직면하고있는 문제는 정수의 값을 최대 값에서 최소값으로 정렬해야한다는 것입니다.

입력 예 :

World
World
World
Hello
Hello
Hello
Hello

예상 출력 :

Hello
World


2 답변


1

당신은 확실히 TreeMap을 사용할 수 있지만, 더 쉬운 방법은 이미 HashMap에서 모든 것을 처리하고 있다면 ArrayList로 내보내고 비교자를 통해 정렬하는 것입니다. 이 작업을 수행하는 방법은 다음과 같습니다.

//This comparator sorts by HashMap values.
Comparator <Map.Entry<String, Integer>> sortCompare = 
(Map.Entry<String, Integer> firstValue, Map.Entry<String, Integer> secondValue)
   -> secondValue.getValue().compareTo(firstValue.getValue());

//This is the list that will hold each entry from the map.
List<Map.Entry<String, Integer>> orderedList = new ArrayList<>();

//Pulls the data from the existing map.
orderedList.addAll(myMap.entrySet());

//Now all that is left to do is sort with the comparator we made.
Collections.sort(orderedList, sortCompare);

//Now the array list is ordered largest to smallest and you can do whatever with it.

이것은 TreeMaps를 특히 좋아하지 않기 때문에 정렬을 처리하는 방법이지만, HashMap을 제거하려는 경우 일부 연구를 수행하고 작업 할 수 있습니다.


0

TreeMap을 사용하여 고유 문자열을 키 및 발생 횟수로 값으로 저장할 수 있습니다. TreeMap은 사용자 정의 비교자를 지원하므로 맵에있는 모든 항목을 정렬하는 로직을 작성할 수 있습니다.

연결된 질문


관련된 질문

최근 질문