java中map排序_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 map =new

HashMap();map.put("name",“aa”); String name=map.get("name");

2.排序:

先看看JDK中是怎么定义的吧

(1)public static > void sort(List list)根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是可相

互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。

此排序方法具有稳定性:不会因调用 sort 方法而对相等的元素进行重新排序。

指定列表必须是可修改的,但不必是大小可调整的。

该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。 此实现将指定列表转储到一个数组中,并对数组进行排序,

在重置数组中相应位置处每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的 n2 log(n) 性能。

参数:

list - 要排序的列表。

抛出:

ClassCastException - 如果列表包含不可相互比较 的元素(例如,字符串和整数)。

UnsupportedOperationException - 如果指定列表的列表迭代器不支持 set 操作。

另请参见:

Comparable

(2)

public static void sort(List 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 {

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 > void sort(List list)--------------(List list)我能理解,是比较传入的集合用的。------前面的public static >

中的> 是什么意思,干嘛用的--初学者自学中,有什么特别笨的地方请见谅。。。

> 是定义T的类型,必须扩展自Comparable super T>即T必须是一个Comparable能比较的对象。就是说传入的List 中的T类型,必须继承自Comparable,即必须具有有效的compareTo方

法。自定义的class A{},没有compareTo,就不能List a传入这个Collections.sort(a)方法。  该方法无返回值

答:就是你的List这个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()

return -1;

else if(user.getAge()=this.getAge())

reutrn 0;                }

}

} 至于你问的那个是什么意思,那个是泛型,可能你现在还不怎么了解,学到后面就会知道了,有专门讲这一章的

.net中集合排序:

chitemlst[i].lcWorkLinkDtos.Sort(delegate(CodeDto v1, CodeDto v2) { return Comparer.Default.Compare(v1.code, v2.code); });

对集合中的某个字段进行排序的方法;使用集合的Sort()方法来声明个委托来进行比较;例如上面的例子,对集合中CodeDto类的code字段来进行排序;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值