java treeMap信息

最新看啦一篇文章,深有感觸,因此又吧treeMap細節從新學習啦一下!html

treeMap自己就是默認排序的!他是添加內容的時候進行排序的;java

return comparator==null ? ((Comparable<? super K>)k1).compareTo((K)k2)
            : comparator.compare((K)k1, (K)k2);
Comparable<? super K> k = (Comparable<? super K>) key;

comparator表示傳遞是否傳遞 排序對象;學習

默認按照的是asc碼值進行排序的!若是傳遞自定義的Comparator,則按照自定義進行排序;code

一 treeMap是二叉樹排序的 詳情看:http://www.cnblogs.com/chenssy/p/3746600.htmlorm

二 treeMap 排序的時候能夠 捨去 大小寫,按照正常的排序:htm

Map<String, String> map = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
map.put("a", "abstract1");
map.put("b", "abstract2");
map.put("a", "abstract4");
map.put("A", "abstract3");

//key:a= value:abstract3
//key:b= value:abstract2

    出現這個狀況的緣由是源碼中的[每次若是他的key比較爲0的時候都會把value進行替換,由於忽律啦大小寫,因此會出現這個結果]:對象

Comparable<? super K> k = (Comparable<? super K>) key;
do {
  parent = t;
  cmp = k.compareTo(t.key);
  if (cmp < 0)
     t = t.left;
  else if (cmp > 0)
     t = t.right;
  else
     return t.setValue(value);
} while (t != null);

日期例子:blog

Map<String, Integer> map = new TreeMap<String, Integer>(new Comparator<String>() {

		public int compare(String o1, String o2) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			try {
				return sdf.parse(o1).compareTo(sdf.parse(o2));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return 0;
		}
	});
map.put("2016-7-3", 100);
map.put("2016-7-10", 120);
map.put("2016-8-1", 90);

//注:此處的返回值不能用 return (int)(sdf.parse(o1).getTime() - sdf.parse(o2).getTime()) 
//由於 sdf.parse(o1).getTime返回的是long類型,long類型轉換int會出現截取!致使數值不正確,正確方式能夠參考
//Date.java中的compareTo方法
相關文章
相關標籤/搜索