1

要素をキーで並べ替えることができるセットが必要です。キーは整数ですが、連続していません。これは私が持っているものの例です:

<3, Alessandro>
<12, Mario>
<1, Marco>

そして、これらの要素を次の順序で出力する必要があります。

Marco    
Alessandro
Mario

を使用してみTreeMapましたが、次のようなループを作成できません。

for(int i = 0; i < treeMap.size(); i++){    
    System.out.println(treeMap.get(i));         
}

キーはシーケンシャルではなくtreeMap.get()、キーの整数がわからないため、 を呼び出すとエラーが発生するためです。

4

2 に答える 2

4

getインデックス位置ではなく、キーで取得します。entrySetorを繰り返しkeySetます。

設定:

TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>();

treeMap.put(3, "Alessandro");
treeMap.put(12, "Mario");
treeMap.put(1, "Marco");

を使用entrySetした例。この場合、Map.Entry<Integer, String>反復ごとに を取得します。

for (Map.Entry<Integer, String> entry : treeMap.entrySet()) {
    System.out.println(entry.getValue());
}

または、必要に応じてkeySet、キー ( Integers)を提供します。

for (Integer key : treeMap.keySet()) {
    System.out.println(treeMap.get(key));
}

いずれにせよ、上記の結果は次のようになります。

マルコ
アレッサンドロ
マリオ

たとえば、キーの自然な順序で並べ替えます。

于 2015-01-21T10:17:34.853 に答える
2

Map の代わりに set を使用する必要がある場合は、TreeSet を使用し、set で使用される型として、キーと値をラップし、キーで比較されるオブジェクトを使用できます。以下のサンプル:

package com.stackoverflow;

public class KeyValue<K extends Number, V> implements Comparable<KeyValue<K, V>> {

    private final K key;

    private final V value;

    public KeyValue(K key, V value) {
        this.key = key;
        this.value = value;
    }

    public K getKey() {
        return key;
    }

    public V getValue() {
        return value;
    }

    @Override
    public int compareTo(KeyValue<K, V> o) {
        long keyValue = key.longValue();
        long argKeyValue = o.key.longValue();
        return (keyValue == argKeyValue) ? 0 : (keyValue < argKeyValue) ? -1 : 1;
    }

    @Override
    public String toString() {
        return key.toString() + ": " + value.toString();
    }
}

使用例:

package com.stackoverflow;

import java.util.TreeSet;

public class Main {

    public static void main(String[] args) {
        TreeSet<KeyValue<Integer, String>> keyValues = new TreeSet<KeyValue<Integer, String>>();

        KeyValue<Integer, String> keyValue1 = new KeyValue<Integer, String>(2, "asd");
        KeyValue<Integer, String> keyValue2 = new KeyValue<Integer, String>(102, "sfsaf");
        KeyValue<Integer, String> keyValue3 = new KeyValue<Integer, String>(12, "dgs");
        KeyValue<Integer, String> keyValue4 = new KeyValue<Integer, String>(222, "dsgds");
        KeyValue<Integer, String> keyValue5 = new KeyValue<Integer, String>(22, "aa");
        KeyValue<Integer, String> keyValue6 = new KeyValue<Integer, String>(1, "sfasaf");
        KeyValue<Integer, String> keyValue7 = new KeyValue<Integer, String>(3, "sfs");
        KeyValue<Integer, String> keyValue8 = new KeyValue<Integer, String>(4, "www");

        keyValues.add(keyValue1);
        keyValues.add(keyValue2);
        keyValues.add(keyValue3);
        keyValues.add(keyValue4);
        keyValues.add(keyValue5);
        keyValues.add(keyValue6);
        keyValues.add(keyValue7);
        keyValues.add(keyValue8);

        for (KeyValue<Integer, String> keyValue : keyValues) {
            System.out.println(keyValue);
        }
    }
}
于 2015-01-21T10:25:04.860 に答える