list如何排序

list如何排序,第1张

我想你要的应该是这样的。

import javautilArrayList;

import javautilCollections;

import javautilList;

public class Test_list_order {

public static void main(String[] args) {

List<Integer> list = new ArrayList<Integer>();

listadd(1);

listadd(4);

listadd(9);

listadd(3);

listadd(2);

listadd(11);

Collectionssort(list);

for (Integer i : list) {

Systemoutprintln(i);

}

}

}

希望能够帮助你。

不好意思,上午只是粗略地看了一下,没有细致看,现在详细回答你的提问。

ArrayList底层是用一个长度为10的Object数组实现,不管添加进去什么类型数据,都会转换成Object对象,除非你用很早以前的JDK版本。这样就好理解了,像你写的程序arrayList1中add了String和Integer两种类型的数据,这两类对象没有什么可比性,就像拿打火机和U盘比一个性质。所以,是没有办法进行直接排序的。

你要求的是要按ArrayList里面的第1、2、4数据进行排序,这个可以。

先来arrayList1

四个数据分别是2、"daas"、6、"1",第1、2、4数据即2、“daas”、“1”,我选择按照String类型进行排序,所以第1个数据2转换成String类型即可。因为第3个数据6不进行排序,remove就好。这是个题还是个什么,其实还是留了点活路的,因为后面的(你arrayList2\3\4下面)代码都是往arrayList1中添加的,而且还都是String类型。这也是我选择String类型进行排序的原因。代码如下:

List arrayList1 = new ArrayList();

      arrayList1add(2); //0

      arrayList1add("daas"); //1

      arrayList1add(6); //2

      arrayList1add("1"); //3

      listadd(arrayList1);

   

      //my code

      String convert = StringvalueOf(arrayList1get(0));

      arrayList1remove(2);

      arrayList1remove(0);

      arrayList1add(convert);

 

/此处为你的arrayList2\3\4代码

 

      Collectionssort(arrayList1);

      for(int i = 0; i < arrayList1size(); i++) {

      Systemoutprintln(arrayList1get(i));

      }

结果为:

1

2

3

5

8

daas

因为怕你深挖,强调两点:

第一点,由结果看出Collectionssort(arrayList1),是以String的ASCII码进行排序的,为了证明这一点,就要看原代码,这时你就会发现JDK中String的compareTo方法是个空实现,底层并不是用java写的,这点没事,我们可以用一定的方法让它把特征暴露出来,然后就可以理解思想。你看我下面写的小测试程序就会明白。

String a = new String("Z");

String b = new String("A");

Systemoutprintln(acompareTo(b));

String c = new String("A");

String d = new String("B");

Systemoutprintln(ccompareTo(d));

//看结果,证明String的自然顺序比较即比较ASCII值,只是第一步。

//看结果,证明compareTo返回值是后面的ASCII码减支前面的ASCII码,第二步。

String e = new String("g");

String f = new String("e");

String h = new String("h");

List<String> list = new ArrayList<String>();

listadd(e);

listadd(f);

listadd(h);

Collectionssort(list);

for(String i : list) {

Systemoutprintln(i);

}

结果为:

25

-1

e

g

h

//证明String的自然排序即ASCII码从小到大排序,最后一步。

第二点,你的要求是“要按ArrayList里面的第1、24数据进行排序,分别怎么做啊”,这个问题的描述有问题,或者不详细,arryList2、arrayList3、arrayList4任何一个里面一共就add了3个数据,哪来第4个。如果是分别对arrayList2\3\4里面的数据进行排序,两个选择,(1)把所有Integer转换成String类型,再排序,参考arrayList2。(2)运用IntegervalueOf()方法,将内容为数字的String数据转换成Integer,把原来的remove掉,把内容非数字的String数据remove掉,再排序,桶排序、冒泡排序、快速排序等你随便选。

讲解到这,不管想对哪个list进行排序,你应该都会写了。

总结:

除非比较ASCII码,Integer类型和内容为非数字的String类型数据是没有办法进行比较的,不管是直接比较,还是间接比较。还是上面那句话,像打火机和U盘没有可比性一样,理解这点很重要。

即使用IntegervalueOf()方法对内容为非数字的String类型数据进行转换没有用,会报NumberFormatException。说这点意思是如果你想按Integer类型排序,得把所有内容为非数字的String类型数据remove掉。

题外话:这种类型的题我记得上大学的时候有,不知道你是不是学生,今天想来,其实用处真不大,都用泛型,现在写代码不用泛型的程序员几乎是完全不存在了。

祝心情愉快~~

亲手打,如果满意,把分给我吧~~哈哈。。

看例子

import javautilArrayList;

import javautilCollections;

import javautilComparator;

import javautilList;

import javautilScanner;

public class Test {

public static void main(String[] args) {

List<Record> list = new ArrayList<Record>();

Collectionssort(list, new Comparator<Record>(){

public int compare(Record o1, Record o2) {

if(o1getKey1() > o2getKey1()){

return 1;

}else if(o1getKey1() == o2getKey1()){

if(o1getKey2() > o2getKey2()){

return 1;

}else if(o1getKey2() == o2getKey2()){

//TODO: compare key3

return -1;

}else{

return 0;

}

}else{

return 0;

}

}

});

}

}

class Record{

private int key1, key2, key3;

public int getKey1() {

return key1;

}

public int getKey2() {

return key2;

}

public int getKey3() {

return key3;

}

}

以上就是关于list如何排序全部的内容,包括:list如何排序、java 怎么将List里面数据排序、Collections.sort方法对数据库取出的list排序 按着5个key 进行排序,求解!~java等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9267812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存