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字段来进行排序;
相关文章
- Android中的menu和navigation的选项卡使用案例
- File类的特点?如何创建File类对象?Java中如何操作文件内容,什么是Io流Io流如何读取和写入文件?字节缓冲流使用原则?
- Apache Flink 和 Paimon 在自如数据集成场景中的使用
- shell脚本中的case条件语句介绍和使用案例
- 两千字讲明白java中instanceof关键字的使用!
- MongoDB详解(2)--java中的使用
- SSE(Server-sent events)技术在web端消息推送和实时聊天中的使用
- C++进阶--unordered_set、unordered_map的介绍和使用-四、unordered_map的介绍
- Linux Kernel C语言编程范式 内部DSL是嵌入到开发语言内部,与开发语言混合使用的DSL,它可以是一个接口,如printf,也可以是一个宏,如下示例。UNUSUAL_DEV呈现了2种信息,一种是设备id_table信息,用于驱动匹配,一种是unusual_dev_list,用于标示非标准设备。具体设计和实现细节可以参考《Linux设备驱动框架设计》一文中的“USB块设备驱动框架设计”小节,不再赘述。
- 在jdbc基础上进阶一小步的C3p0 连接池(DBCP 不能读xml配置文件,已淘汰) 和DBUtils 中两个主要类QueryRunner和ResultSetHandler的使用