Mapコレクション内のオブジェクトのソート方法

2600 ワード

今日は、Map集合のUserオブジェクトのageに基づいて昇順または降順に並べ替える方法について、面接問題を見ました.
ここに記録しておきます
Map集合はキー値対形式でデータが格納されていることはよく知られていますが、それ自体は順序がありません.では、どのようにソートしますか?ここで試験する
次の例を示します.
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class Test3 {
	public static void main(String[] args) {
		Map map = new HashMap();
		map.put(1, new User("Tom", 12));
		map.put(2, new User("Jerry", 15));
		map.put(3, new User("jack", 21));
		map.put(4, new User("Bob", 10));
		map.put(5, new User("Locy", 18));

		println(map);//    

	}
        
	public static Map println(Map map) {
		System.out.println("map---"+map);
		Set< Entry> entrySet = map.entrySet();
		
		List> list = new ArrayList>(entrySet);
		System.out.println("list---"+list);
		
		Collections.sort(list, new Comparator>() {

			@Override
			public int compare(Entry o1, Entry o2) {
				return o1.getValue().getAge()-o2.getValue().getAge();
			}
		});
		
		LinkedHashMap link = new LinkedHashMap();

		System.out.println("-----------------------------");
		for (Entry entry : list) {
			link.put(entry.getKey(), entry.getValue());
		}
		System.out.println(link);
		return link;
	}
}

コンソールで印刷されたものを見てみましょう
ここで私はフォーマットの変更を行いました---明らかに私たちが望んでいる順序はすでに出ています
           
map---{1=User [name=Tom, age=12],
       2=User [name=Jerry, age=15],
       3=User [name=jack, age=21],
       4=User [name=Bob, age=10], 
       5=User [name=Locy, age=18]}

---------       
list---[1=User [name=Tom, age=12],
        2=User [name=Jerry, age=15], 
        3=User [name=jack, age=21], 
        4=User [name=Bob, age=10], 
        5=User [name=Locy, age=18]]

-----------------------------    
{4=User [name=Bob, age=10], 
 1=User [name=Tom, age=12], 
 2=User [name=Jerry, age=15],
 5=User [name=Locy, age=18],
 3=User [name=jack, age=21]}

では、ここまでで完成したら好奇心のある仲間が聞きますか?
あなたはこれが昇順で、私は降順の配列がどのように良いことを聞きたいです!!
転化の流れをよく理解すれば難しいことではありません.よく考えて、よく勉強して、私と同じように積極的に勉強している人はみな大物になることを望んでいます.
俺は大物じゃないけど