java中map的使用和排序使用

1.//java中map的使用:
將鍵映射到值的對象。一個映射不能包含重複的鍵;每個鍵最多隻能映射到一個值。採用鍵值對的形式存儲數據,主鍵唯一,當給一個鍵重複賦值時第二次賦的值會覆蓋第一次賦的值。設置值用set("key","value");,獲得指
定鍵的值用get("key")。例如:Map map = new HashMap();map.put("name",“aa”);map.put("age",15);  此時map.get("key")的值爲15,如果在後面再加一句map.put("age",25);,此時map.get("key")值就爲25。上面的
Map沒有使用泛型,得到的值爲Object類型,需要進行類型轉換。String name=(String)map.get("name");int age=((Integer)map.get("age")).intValue();  使用泛型則不需要轉換,例如:Map<String,String> map =new
HashMap<String,String>();map.put("name",“aa”); String name=map.get("name");
2.排序:
先看看JDK中是怎麼定義的吧
(1)public static <T extends Comparable<? super T>> void sort(List<T> list)根據元素的自然順序 對指定列表按升序進行排序。列表中的所有元素都必須實現 Comparable 接口。此外,列表中的所有元素都必須是可相
互比較的(也就是說,對於列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得拋出 ClassCastException)。
此排序方法具有穩定性:不會因調用 sort 方法而對相等的元素進行重新排序。
指定列表必須是可修改的,但不必是大小可調整的。
該排序算法是一個經過修改的合併排序算法(其中,如果低子列表中的最高元素小於高子列表中的最低元素,則忽略合併)。此算法提供可保證的 n log(n) 性能。 此實現將指定列表轉儲到一個數組中,並對數組進行排序,
在重置數組中相應位置處每個元素的列表上進行迭代。這避免了由於試圖原地對鏈接列表進行排序而產生的 n2 log(n) 性能。

參數:
list - 要排序的列表。
拋出:
ClassCastException - 如果列表包含不可相互比較 的元素(例如,字符串和整數)。
UnsupportedOperationException - 如果指定列表的列表迭代器不支持 set 操作。
另請參見:
Comparable
(2)
public static <T> void sort(List<T> list,
                            Comparator<? super T> c)根據指定比較器產生的順序對指定列表進行排序。此列表內的所有元素都必須可使用指定比較器相互比較(也就是說,對於列表中的任意 e1 和 e2 元素,
c.compare(e1, e2) 不得拋出 ClassCastException)。
此排序被保證是穩定的:不會因調用 sort 而對相等的元素進行重新排序。
排序算法是一個經過修改的合併排序算法(其中,如果低子列表中的最高元素小於高子列表中的最低元素,則忽略合併)。此算法提供可保證的 n log(n) 性能。 指定列表必須是可修改的,但不必是可大小調整的。此實現將
指定列表轉儲到一個數組中,並對數組進行排序,在重置數組中相應位置每個元素的列表上進行迭代。這避免了由於試圖原地對鏈接列表進行排序而產生的 n2 log(n) 性能。
參數:
list - 要排序的列表。
c - 確定列表順序的比較器。null 值指示應該使用元素的自然順序。
拋出:
ClassCastException - 如果列表中包含不可使用指定比較器相互比較 的元素。
UnsupportedOperationException - 如果指定列表的列表迭代器不支持 set 操作。
另請參見:
Comparator
下面看下實際例子吧:
// 按mainProjCode升序、按subProjCode降序排列
Collections.sort(dtos, new PmProjAndSubProjViewComparator());
class PmProjAndSubProjViewComparator implements
   Comparator<PmProjAndSubProjViewDto> {
  public int compare(PmProjAndSubProjViewDto o1,
    PmProjAndSubProjViewDto o2) {
                        //先比較主的mainid
   int result = o1.getMainId().compareTo(o2.getMainId());
                        //如果主id比較相等話,在比較從的id
   if (result == 0) {
                                //如果o2中SubId字段爲空的話就返回o1中的值
    if (StringUtils.isBlank(o2.getSubId())) {
     return 1;
    }
   //如果o1中SubId字段爲空的話就返回o2中的值
    if (StringUtils.isBlank(o1.getSubId())) {
     return -1;
    }
    result = o2.getSubId().compareTo(o1.getSubId());
   }
   return result;
  }
 }
要充分理解排序就必須先理解最後的return 0, -1 , 1  這三個數字代表的含義。它們不是代表數字而是代表前面和後面要比較的值哪個大哪個小?如果是0表示要比較的這兩個數字相等。如果是1表示前面數字大,如果 -1表
示前面數字小。要理解這個就沒問題了。
在寫這個比較規則的時候,千萬不要想着套數字進去來進行比較,就想着前面數字和後面數字比較,如果前面大就return 1,否則return -1.
這個類似於.net中這個排序:
根據Collections.sort重載方法來實現 
一下是從網上搜到的關於Collections.sort排序的問題,希望對大家有所幫助。
(1)public static <T extends Comparable<? super T>> void sort(List<T> list)--------------(List<T> list)我能理解,是比較傳入的集合用的。------前面的public static <T extends Comparable<? super T>>
中的<T extends Comparable<? super T>> 是什麼意思,幹嘛用的--初學者自學中,有什麼特別笨的地方請見諒。。。
<T extends Comparable<? super T>> 是定義T的類型,必須擴展自Comparable<? super T>即T必須是一個Comparable能比較的對象。就是說傳入的List<T> 中的T類型,必須繼承自Comparable,即必須具有有效的compareTo方
法。自定義的class A{},沒有compareTo,就不能List<A> a傳入這個Collections.sort(a)方法。  該方法無返回值
答:就是你的List<T>這個T也就是你要放進去的類型,然後呢這個類型T要實現Comparable接口,這個接口有一個compareTo(T o)方法,你要重寫這個方法,在這個方法裏面寫你的排序規則。sort放回調用這個compareTo(T o)
方法排序舉個例子:一個User類
public class User implements Comparable{        private int age;      
  private String name;      
  //get set方法我就不寫了       
 //比較此對象與指定對象的順序。如果該對象小於、等於或大於指定對象,則分別返回負整                        //數、零或正整數。          //這裏我就用age比較     
   @Override        public int compareTo(T o){          
      User user=(User)o;              
  if(user!=null){                   
     if(user.getAge()>this.getAge())                             
   return 1;                      
  else if(user.getAge()<this.getAge())        
                       return -1;                       
 else if(user.getAge()=this.getAge())                            
    reutrn 0;                }      
  }
} 至於你問的那個是什麼意思,那個是泛型,可能你現在還不怎麼了解,學到後面就會知道了,有專門講這一章的
.net中集合排序:
chitemlst[i].lcWorkLinkDtos.Sort(delegate(CodeDto v1, CodeDto v2) { return Comparer<string>.Default.Compare(v1.code, v2.code); });
對集合中的某個字段進行排序的方法;使用集合的Sort()方法來聲明個委託來進行比較;例如上面的例子,對集合中CodeDto類的code字段來進行排序;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章