Java代碼常用功能實現總結(二)

1.如何取得map裏key得最大值:

方法一:
將Map中的key存放至set集合中,進行排序,排序後的set中第一個值即爲最小,最後一個即爲最大

import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class test {
	public static void main(String[] args) {
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		map.put(1, 8);
		map.put(3, 53);
		map.put(5, 12);
		System.out.println(getMaxKey(map));
		System.out.println(getMaxValue(map));
	}

	/**
	 * 求Map<K,V>中Key(鍵)的最大值
	 */
	public static Object getMaxKey(Map<Integer, Integer> map) {
		if (map == null)
			return null;
		Set<Integer> set = map.keySet();
		Object[] obj = set.toArray();
		Arrays.sort(obj);
		return obj[obj.length - 1];
	}

	/**
	 * 求Map<K,V>中Value(值)的最大值
	 */
	public static Object getMaxValue(Map<Integer, Integer> map) {
		if (map == null)
			return null;
		Collection<Integer> c = map.values();
		Object[] obj = c.toArray();
		Arrays.sort(obj);
		return obj[obj.length - 1];
	}
}

運行結果:
5
53

方法二:可以直接使用TreeSet和TreeMap,最後一個爲最大值,第一個爲最小值

補充:
TreeMap是Map接口的常用實現類,而TreeSet是Set接口的常用實現類。雖然 TreeMap和TreeSet實現的接口規範不同,但TreeSet底層是通過TreeMap來實現的(如同HashSet底層是是通過HashMap來實現的一樣),因此二者的實現方式完全一樣。而TreeMap的實現就是紅黑樹算法。

相同點:
TreeMap和TreeSet都是有序的集合,也就是說他們存儲的值都是拍好序的。
TreeMap和TreeSet都是非同步集合,因此他們不能在多線程之間共享,不過可以使用方法Collections.synchroinzedMap()來實現同步
運行速度都要比Hash集合慢,他們內部對元素的操作時間複雜度爲O(logN),而HashMap/HashSet則爲O(1)。

不同點:
最主要的區別就是TreeSet和TreeMap非別實現Set和Map接口
TreeSet只存儲一個對象,而TreeMap存儲兩個對象Key和Value(僅僅key對象有序)
TreeSet中不能有重複對象,而TreeMap中可以存在
 

Set<Integer> a=new HashSet<Integer>();
// 等效於
HashSet<Integer> b = new HashSet<Integer>();

Set<Integer> c=new TreeSet<Integer>();
// 等效於
TreeSet<Integer> d = new TreeSet<Integer>();

a.add(5);

Set是接口,HashSet和TreeSet是實現類
Hashset顧名思義裏面是哈希表結構
TreeSet就是樹結構
1、TreeSet 是二差樹實現的,Treeset中的數據是自動排好序的,不允許放入null值。
2、HashSet 是哈希表實現的,HashSet中的數據是無序的,可以放入null,但只能放入一個null,兩者中的值都不能重複,就如數據庫中唯一約束。存取速度比較快
注:由於HashSet儲存數據都是無序的,所以不能用get(i);來獲取具體對象。所以我們必須通過遍歷來得到HashSet的各個數據,由於是沒有索引的。所以不能使用普通類型的for來遍歷它。HashSet只能通過增強型for和迭代器來遍歷它

	public static void main(String[] args) {
		HashSet<Integer> a = new HashSet<Integer>();
		a.add(5);
		a.add(4);
		a.add(3);
		for(Integer n : a) {
			System.out.println(n);
		}
		Iterator<Integer> it = a.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章