按照员工的工资高低排序(代码已有 谁帮我 解释下 我看大不明白)

yy357510564 2009-10-18 10:31:39
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


public class T {
public static void main(String args[]) {
ArrayList<User> list = new ArrayList<User>();
list.add(new User("张三", 1000));
list.add(new User("李四", 1500));
list.add(new User("王五", 1000));
list.add(new User("赵六", 1200));
list.add(new User("笑笑", 1500));
list.add(new User("细细", 1800));
Collections.sort(list);
for (User o : list) {
System.out.println(o.name + "=" + o.salary);
}
}
}

class User implements Comparable {
User(String name, int salary) {
this.name = name;
this.salary = salary;
}

public int compareTo(Object obj) {
if (obj instanceof User) {
User kv = (User) obj;
return kv.salary - this.salary;
}
return -1;
}

String name;

int salary;
}
...全文
524 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
钱不是问题 2009-10-19
  • 打赏
  • 举报
回复
好象是jdk1.6新特性吧?不确定
yy357510564 2009-10-19
  • 打赏
  • 举报
回复
for (User o : list)
这个也解释下 没见过这样的for循环
yy357510564 2009-10-19
  • 打赏
  • 举报
回复
谢谢各位 结贴了
lzh_me 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ima 的回复:]
引用 4 楼 yy357510564 的回复:
for (User o : list)
这个也解释下  没见过这样的for循环

这个是jdk1.5中新引进的写法,遍历list中每个元素,放到赋给o对象

相当于
java.util.List <String> list=null;
java.util.Iterator <User> i = list.iterator();
while(i.hasNext()){
User u = i.next();
}
或者
for(int i = 0;i <list.size();i++){
User u = list.get(i);
}
[/Quote]
楼上已经很好的解释了for (User o : list),我也记得好像是JDK1.5的新特性。


Collections.sort(list); //进行排序
以下是JDK API 的解释:
sort
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

--------------------------------------------------------------------------------

sort
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
Agile牧 2009-10-19
  • 打赏
  • 举报
回复
这代码写的很清楚嘛
Collections.sort(list); 进行排序
for (User o : list) 这是jdk1.6里面新的for循环,是可以这样写的,比较省力,代码也比较简洁
zl3450341 2009-10-19
  • 打赏
  • 举报
回复
Collections.sort(list); 这句话就是排序

for (User o : list) 
这个也解释下 没见过这样的for循环


5楼解释了
imA 2009-10-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yy357510564 的回复:]
for (User o : list)
这个也解释下  没见过这样的for循环
[/Quote]
这个是jdk1.5中新引进的写法,遍历list中每个元素,放到赋给o对象

相当于
java.util.List<String> list=null;
java.util.Iterator<User> i = list.iterator();
while(i.hasNext()){
User u = i.next();
}
或者
for(int i = 0;i<list.size();i++){
User u = list.get(i);
}
blliy117 2009-10-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 rookie001 的回复:]
主要是:
实现啦Comparable接口,重写compareTo()方法就可以比较对象的属性啦
  public int compareTo(Object obj) {
    if (obj instanceof User) {      obj 是User的一个实例,才进行比较,不同类型的对象当然不比较了
      User kv = (User) obj;        这里是转回User对象,因为obj是父类引用指向子类对象
                                                不转的话,无法访问子类的属性salary
      return kv.salary - this.salary;
    }
    return -1;
  }
[/Quote]

实现 比较器就可以了。
rookie001 2009-10-18
  • 打赏
  • 举报
回复
主要是:
实现啦Comparable接口,重写compareTo()方法就可以比较对象的属性啦
public int compareTo(Object obj) {
if (obj instanceof User) { obj 是User的一个实例,才进行比较,不同类型的对象当然不比较了
User kv = (User) obj; 这里是转回User对象,因为obj是父类引用指向子类对象
不转的话,无法访问子类的属性salary
return kv.salary - this.salary;
}
return -1;
}
yy357510564 2009-10-18
  • 打赏
  • 举报
回复
题目来自JAVA2000里的

50,534

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧