浅谈在java中list集合的排序问题
来源:互联网 发布:au是什么软件 编辑:程序博客网 时间:2024/06/13 02:43
定义实体类:
public class Person { private Integer id; private String name; private Integer age; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Person(Integer id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; } public Person() { super(); // TODO Auto-generated constructor stub } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; }}
测试类Test:
public static void main(String[] args) { List<Person> list=new ArrayList<Person>(50); list.add(new Person(1, "张三", 21)); list.add(new Person(2, "李四", 20)); list.add(new Person(3, "王五", 23)); list.add(new Person(4, "八戒", 22)); System.out.println(list);
这是会输出对应的值
在java中所有的集合实现类都已经重写toString()方法,不会输出地址
问题:
1.根据编号从大到小排序
2.根据年龄从小到大排序
3.根据姓名排序(中文)
一、第一个问题:
编号问题,在java中有Collections.sort()方法
其中里面的参数采用了重载
其中第二个中的方法参数使用泛型中的下限(super)用法,把list放进去会报错:报实体类Person的问题
其实sort()它要调用一个compareTo()方法
首先实现Comparable接口(加泛型Person)
这个时候实现方法
@Override public int compareTo(Person o) { // 根据id排序 if(this.id>o.id) return -1; else if(this.id<o.id) return 1; return 0; }
这个时候会发现不会报错,输出即可
Person1 [id=4, name=八戒, age=22]Person1 [id=3, name=王五, age=23]Person1 [id=2, name=李四, age=20]Person1 [id=1, name=张三, age=21]
二、第二个问题:
年龄问题,有人会说,把id里面的值改一下就可以,但是如果还要比id呢??这种方法不可行,,这时候就可以使用
Collections.sort()中的重载
这个时候我们就需要再写一个写AgeSort
public class AgeSort implements Comparator<Person1> { @Override public int compare(Person1 o1, Person1o2) { if(o1.getAge()>o2.getAge()) return 1; else if(o1.getAge()< o2.getAge()) return -1; return 0; }}
直接在Test类中
Collections.sort(list, new AgeSort());输出即可
Person1 [id=2, name=李四, age=20]Person1 [id=1, name=张三, age=21]Person1 [id=4, name=八戒, age=22]Person1 [id=3, name=王五, age=23]
三、第三个问题:
姓名问题,再创建一个NameSort类
public class NameSort implements Comparator<Person1> { @Override public int compare(Person1 o1, Person1 o2) { return java.text.Collator.getInstance(Locale.CHINESE).compare(o1.getName(), o2.getName()); }}
再次输出为:
Person1 [id=4, name=八戒, age=22]Person1 [id=2, name=李四, age=20]Person1 [id=3, name=王五, age=23]Person1 [id=1, name=张三, age=21]
总结:
1.接口的好处:一个接口有多个实现类,在java中,当参数为接口时,一般都传的是它对应的实现类
2.处理中文排序的问题,使用对应的java包java.text.Collator.getInstance(Locale.CHINESE)
java.text包还可以处理时间转化问题等等(java.text.SimpleDateFormat)
阅读全文
0 0
- 浅谈在java中list集合的排序问题
- java中list集合的排序
- Java 集合List的排序
- list集合中根据对象排序的问题
- Java集合中TreeSet排序浅谈
- java中LIST集合排序通用方法
- Java中对list集合进行排序
- list集合排序问题
- Java中List排序问题
- 在JAVA中,对List集合的加减操作
- 如何在java中实现List集合的遍历
- 在JAVA中,对List集合的加减操作
- Java中List集合被大家忽略的一个问题
- JDK1.7和1.8中List集合中sort方法排序问题【JAVA】
- Android中list集合的排序方法
- Java对List集合的排序
- java List集合中根据集合对象的属性值进行排序
- 在Java中对集合当中的对象进行排序
- Truncated incorrect DOUBLE value: 报错
- 受欢迎的牛bzoj1051(浅谈tarjan——(3))
- Fragment+ViewPage一步步实现底部导航栏。
- 在V4中如何使用局部时钟网络
- paxos算法结合Zookeeper介绍
- 浅谈在java中list集合的排序问题
- C++继承
- [转载]Spring Cloud在国内中小型公司能用起来吗?
- LINUX 查看版本信息
- Python中的装饰器
- 任发科:DevOps的前世来生,从《目标》、《凤凰项目》到《持续交付》
- 删除指定目录下的全部文件或文件夹
- GIT本地服务端搭建顺序
- [转载]中小型互联网公司微服务实践-经验和教训