2017-01-21 15 views
1

こんにちはアレイリストの重複を計算するロジックを作成しましたが、必要な順番で印刷されません。以下は私のコードと私の要件を提供しています。私はフォーマットの下で必要ArrayList <Integer>の重複をどのようにカウントするのですか?

list: [1, 1, 5, 3, 7, 3, 11, 2, 3, 1] 
number: 1, count: 3 
number: 5, count: 1 
number: 3, count: 3 
number: 7, count: 1 
number: 11, count: 1 
number: 2, count: 1 

しかし、私は

list: [1, 1, 5, 3, 7, 3, 11, 2, 3, 1] 
number: 1, count: 3 
number: 2, count: 1 
number: 3, count: 3 
number: 5, count: 1 
number: 7, count: 1 
number: 11, count: 1 

は、ここで挿入順序を保持し、私のコード

package com.abc; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

public class MyArrayListSort 
{ 
public static void main(String []args){ 
    new MyArrayListSort().start(); 
} 
public void start() 
{ 
    List<Integer> list = getList(1, 1, 5, 3, 7, 3, 11, 2, 3, 1); 

    Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
    for (Integer i : list) 
    { 
     Integer retrievedValue = map.get(i); 
     if (null == retrievedValue) 
     { 
      map.put(i, 1); 
     } 
     else 
     { 
      map.put(i, retrievedValue + 1); 
     } 
    } 

    System.out.println("list: " + list); 
    printCount(map); 
} 

private List<Integer> getList(int... numbers) 
{ 
    List<Integer> list = new ArrayList<Integer>(); 
    for (int i : numbers) 
    { 
     list.add(i); 
    } 
    return list; 
} 

private void printCount(Map<Integer, Integer> map) 
{ 
    for (Integer key : map.keySet()) 
    { 
     System.out.println("number: " + key + ", count: " + map.get(key)); 
    } 
} 
} 
+1

「HashMap」には**任意の順序**、または2つの別々の繰り返しで同じ順序があると思いますか? [ドキュメント](https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html)から: "このクラスはマップの順序に関しては保証しません;特に、注文が一定期間にわたって一定であることを保証するものではありません。 –

+0

私は希望の順序で結果を得るためにhashmapを使用しようとしましたが、ハッシュマップを使用しないでこれを助けることができればそれはより良いものになります。:) –

答えて

2

使用LinkedHashMap、だ、フォーマットの下で取得しています、代わりにHashMap

public void start() { 
    List<Integer> list = getList(1, 1, 5, 3, 7, 3, 11, 2, 3, 1); 

    Map<Integer, Integer> map = new LinkedHashMap<Integer, Integer>(); 
    for (Integer i : list) { 
     Integer retrievedValue = map.get(i); 
     if (null == retrievedValue) { 
      map.put(i, 1); 
     } 
     else { 
      map.put(i, retrievedValue + 1); 
     } 
    } 

    System.out.println("list: " + list); 
    printCount(map); 
} 
関連する問題