1.//java中map的使用:
將鍵映射到值的對象。一個映射不能包含重複的鍵;每個鍵最多隻能映射到一個值。採用鍵值對的形式存儲數據,主鍵唯一,當給一個鍵重複賦值時第二次賦的值會覆蓋第一次賦的值。設置值用set("key","value");,獲得指
將鍵映射到值的對象。一個映射不能包含重複的鍵;每個鍵最多隻能映射到一個值。採用鍵值對的形式存儲數據,主鍵唯一,當給一個鍵重複賦值時第二次賦的值會覆蓋第一次賦的值。設置值用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 接口。此外,列表中的所有元素都必須是可相
先看看JDK中是怎麼定義的吧
(1)public static <T extends Comparable<? super T>> void sort(List<T> list)根據元素的自然順序 對指定列表按升序進行排序。列表中的所有元素都必須實現 Comparable 接口。此外,列表中的所有元素都必須是可相
互比較的(也就是說,對於列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得拋出 ClassCastException)。
此排序方法具有穩定性:不會因調用 sort 方法而對相等的元素進行重新排序。
指定列表必須是可修改的,但不必是大小可調整的。
此排序方法具有穩定性:不會因調用 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 而對相等的元素進行重新排序。
此排序被保證是穩定的:不會因調用 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表
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>>
在寫這個比較規則的時候,千萬不要想着套數字進去來進行比較,就想着前面數字和後面數字比較,如果前面大就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方
<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字段來進行排序;
chitemlst[i].lcWorkLinkDtos.Sort(delegate(CodeDto v1, CodeDto v2) { return Comparer<string>.Default.Compare(v1.code, v2.code); });
對集合中的某個字段進行排序的方法;使用集合的Sort()方法來聲明個委託來進行比較;例如上面的例子,對集合中CodeDto類的code字段來進行排序;