arraylist排序

时间:2023-07-19 13:08:23编辑:优化君

1,Java Arraylist 如何使用 Comparator排序

用Comparator是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。
比如:你想对整数采用绝对大小来排序,Integer是不符合要求的,你不需要去修改Integer类(实际上你也不能这么做)去改变它的排序行为,只要使用一个实现了Comparator接口的对象来实现控制它的排序就行了。

示例代码如下:

//AbsComparator.java
import java.util.*;
public class AbsComparator implements Comparator {
public int compare(Object o1, Object o2) {
int v1 = Math.abs(((Integer)o1).intValue());
int v2 = Math.abs(((Integer)o2).intValue());
return v1 > v2 ? 1 : (v1 == v2 ? 0 : -1);
}
}

//Test.java
import java.util.*;
public class Test {
public static void main(String[] args) {

//产生一个20个随机整数的数组(有正有负)
Random rnd = new Random();
Integer[] integers = new Integer[20];
for(int i = 0; i < integers.length; i++)
integers[i] = new Integer(rnd.nextInt(100) * (rnd.nextBoolean() ? 1 : -1));

System.out.println("用Integer内置方法排序:");
Arrays.sort(integers);
System.out.println(Arrays.asList(integers));

System.out.println("用AbsComparator排序:");
Arrays.sort(integers, new AbsComparator());
System.out.println(Arrays.asList(integers));
}
}

2,如何实现对ArrayList排序 sort

使用Collections.sort()传入ArrayList,会采用默认的方式进行排序(字典序)
使用Collections.sort()传入ArrayList和自己实现Commparator接口的类的对象,实现自定义排序
使用List.sort()传入自己实现Commparator接口的类的对象,实现自定义排序
Comparator返回值在jdk1.7、jdk1.8里必须是一对相反数,如1和-1,不能是1和0.因为1.7的排序算法采用timsort,对返回值有严格要求

3,java如何对Arraylist数组进行排序(用comparable)

看代码:import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;public class Demo {public static void main(String[] args) throws Exception {Pair[] pairs = {new Pair(0, 1),new Pair(2, 9),new Pair(7, 0),new Pair(8, 8),new Pair(8, 6),new Pair(9, 2),new Pair(1, 5),new Pair(8, 2),new Pair(9, 15),new Pair(9, 5)};ArrayList pairList = new ArrayList(Arrays.asList(pairs));System.out.println("排序前:");System.out.println(Arrays.toString(pairs));Arrays.sort(pairs); // 对数组排序System.out.println("排序后:");System.out.println(Arrays.toString(pairs));System.out.println("排序前:");System.out.println(pairList);Collections.sort(pairList); // 对 ArrayList 排序System.out.println("排序后:");System.out.println(pairList);}}// 继承 Comparable 接口排序该类是 “可排序的”// 里面的是排序时与当前实例进行比较的实例的类型// 一般都和当前实例是同一个类型,比如这里就是 Pair 的实例 和 Pair 的实例比较class Pair implements Comparable {public int left;public int right;public Pair(int left, int right) {this.left = left;this.right = right;}@Overridepublic String toString() {return "[" + left + ", " + right + "]";}// 排序规则,先按 left 排序,再按 right 排序@Overridepublic int compareTo(Pair that) {if (this.left > that.left) {return 1;} else if (this.left that.right) {return 1;} else if (this.right < that.right) {return -1;}return 0;}} 可以发现先按 left 排序,如果 left 相等,则按 right 排序

4,用Java中ArrayList类实现一个冒泡排序

java.util.Collections类中有
sort
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

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

sort
public static void sort(List list,
Comparator c)根据指定比较器产生的顺序对指定列表进行排序。此列表内的所有元素都必须可使用指定比较器相互比较(也就是说,对于列表中的任意 e1 和 e2 元素,c.compare(e1, e2) 不得抛出 ClassCastException)。
此排序被保证是稳定的:不会因调用 sort 而对相等的元素进行重新排序。

排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n log(n) 性能。 指定列表必须是可修改的,但不必是可大小调整的。此实现将指定列表转储到一个数组中,并对数组进行排序,在重置数组中相应位置每个元素的列表上进行迭代。这避免了由于试图原地对链接列表进行排序而产生的 n2 log(n) 性能。


参数:
list - 要排序的列表。
c - 确定列表顺序的比较器。null 值指示应该使用元素的自然顺序。
抛出:
ClassCastException - 如果列表中包含不可使用指定比较器相互比较 的元素。
UnsupportedOperationException - 如果指定列表的列表迭代器不支持 set 操作。
另请参见:
Comparator

5,java如何对ArrayList中对象按照该对象某属性排序

if(!s1.name.equals(s2.name)){return s2.name.compareTo(s1.name);}else{//姓名也相同则按学号排序return s2.id-s1.id;}}}};Student stu1 = new Student (1,"zhangsan","male",28,"cs");Student stu2 = new Student (2,"lisi","female",19,"cs");Student stu3 = new Student (3,"wangwu","male",22,"cs");Student stu4 = new Student (4,"zhaoliu","female",17,"cs");Student stu5 = new Student (5,"jiaoming","male",22,"cs"); ArrayList List = new ArrayList();List.add(stu1);List.add(stu2);List.add(stu3);List.add(stu4);List.add(stu5);//这里就会自动根据规则进行排序Collections.sort(List,comparator);display(List);}static void display(ArrayList lst){for(Student s:lst)System.out.println(s);}} class Student{int age;int id;String gender;String name;String cs;Student(int id,String name,String gender,int age,String cs){this.age=age;this.name=name;this.gender=gender;this.id=id;return id+" "+name+" "+gender+" "+age+" "+cs;}} 2.添加 Comparable 接口,重写 compareTo 方法。然后你可以用 TreeSet 结构进行排序。它会自动排序。

6,Java中的ArrayList怎么进行冒泡排序

java中的ArrayList进行冒泡排序,主要是循环遍历取出数据,然后进行比较排序,如下代码:package com.qiu.lin.he;import java.util.ArrayList;public class Ceshi {public static void main(String[] args) {ArrayList list = new ArrayList();list.add(76);list.add(4);list.add(786);list.add(43);list.add(21);list.add(432);list.add(10);for (int i = 0; i 0) { // 比较两个整数的大小a = list.get(j - 1);list.set((j - 1), list.get(j));list.set(j, a);//交换数据}}}for (Integer s : list) {System.out.println(s.intValue());//输出arraylist的数据}}}运行结果如下:

7,java的list集合如何根据对象中的某个字段排序

下面的代码是根据学生年龄排序学生list 的一个例子:import java.util.ArrayList;import java.util.List;class Student {private String name;private int age;public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Perosn [name=" + name + ", age=" + age + "]";}}public class App { public static void main(String[] args) { List students = new ArrayList(); students.add(new Student("abc", 12)); students.add(new Student("bcd", 20)); students.add(new Student("cde", 17)); students.add(new Student("def", 25)); students.add(new Student("efg", 15)); students.sort((x, y) -> Integer.compare(x.getAge(), y.getAge())); for (Student stu : students) { System.out.println(stu); } }}运行结果:

8,java如何让list按照list里面的某个字段排序,list里面的有很多字段!

给你个例子看下import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map;public class $ { public static void main(String[] args) { List> data = new ArrayList>(); init(data); System.out.println("排序前:"); System.out.println(data); sort(data); System.out.println("排序后:"); System.out.println(data); } private static void sort(List> data) { Collections.sort(data, new Comparator() { public int compare(Map o1, Map o2) { Integer a = (Integer) o1.get("PRECOUNTOUT"); Integer b = (Integer) o2.get("PRECOUNTOUT"); // 升序 return a.compareTo(b); // 降序 // return b.compareTo(a); } }); } private static void init(List> data) { Map map = new HashMap(); map.put("COUNTTICKET", 1); map.put("PRECOUNTOUT", 2); data.add(map); map = new HashMap(); map.put("COUNTTICKET", 6); map.put("PRECOUNTOUT", 7); data.add(map); map = new HashMap(); map.put("COUNTTICKET", 8); map.put("PRECOUNTOUT", 5); data.add(map); map = new HashMap(); map.put("COUNTTICKET", 2); map.put("PRECOUNTOUT", 3); data.add(map); }}

9,如何把一个list集合中的对象,按对象的一个属性排序

list 是你要排序的。
Collections 是集合的公共类,提供各种工具,其中提供了排序方法。
Collections.sort(),方法两个参数,1,要排序的集合,2.排序方式
下面是匿名内部类,实现了排序借口,你也可以写外面。
Comparator c=new Comparator() {

@Override
public int compare(T o1, T o2) {
// TODO Auto-generated method stub
return 0;
}
}

精华总结

雨露,是万物生长的灵丹妙药,它能让万物欣欣向荣,给人带来希望和欢乐。起名,是给孩子取名最重要的一步,因为名字,在某种程度上就是一种文化。一个好的名字,可以让孩子从小拥有一个好的起点。那么,旸字取名呢,有着什么样的寓意及含义?

1、旸是五行金之字,五行属水,寓意孩子聪明机智,有大智慧,富有爱心。

根据五行属性来取名,金能克水,就像是金被水淹没了,所以会出现水变少,阳气不充足的情况。而旸字五行属水,表示有希望的样子,寓意孩子聪明机智,有大智慧,富有爱心,有爱心之义,对人非常友好,人缘非常好。由于在起名时需要注意五行八字,所以名字要避开太多不利因素。例如孩子取名为旸这个名字时,可选择五行属金且与水相冲或水火相济或金水相济等字面寓意相搭。

2、旸字是木之金之字,五行属木,为金之态,寓意孩子金木水火土五行协调,和谐发展。

雨露的滋润,日出而作,日落而息,都让人感到无比满足。旸,字音shèng,寓意着孩子有一颗包容和感恩之心。这与“日出而作、日落而息”有异曲同工之妙……旸给人带来欢乐、吉祥的同时,也寓意着孩子金木水火土协调发展……

3、旸是一种很有灵性的字,可形容孩子生机勃勃,乐观向上。

【旸】有光明、温暖、明朗的意思,可用作名字。【阳凯是太阳之意。【阳阳阳】阳代表明亮,阳代表光明及温暖。用阳代表光明的事物,表示孩子生机勃勃,乐观向上。【阳欣可表示欣欣向荣之意。【阳和】可表示温暖的意思。

4、旸字取名,寓意孩子乐观向上,对生活充满希望。

旸字寓意孩子乐观向上,对生活充满希望,乐观积极的生活态度,有助于提高孩子的自信心。另外旸字取名还有着积极向上、乐观开朗、吉祥幸福、生活美满、幸福美满等美好祝愿,其寓意吉祥。而且旸在中国汉字里是非常多见的一个字,我们可以将这个字用在名字中来表达。旸字取名代表着孩子未来很美好而充满希望。如果将其用于起名中,则代表着孩子未来会有很多希望。同时也象征着孩子将来会有所成就。

5、旸作为名字有吉祥富贵之意。

旸这个名字,在很早的时候就被赋予了吉祥富贵的寓意,因为它在名字中的意思很多。所以有很高的吉祥富贵之意。这个名字将孩子命名为【旸】具有美好的寓意。

上一篇:神尾叶子,了解漫画家【神尾叶子】吗?

下一篇:互译