首页编程arraylist排序,Java中的ArrayList怎么进行冒泡排序

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

编程之家2023-11-0397次浏览

朋友们,你是否曾想过深入了解arraylist排序和Java中的ArrayList怎么进行冒泡排序的内涵?在本文中,我将为你详细解析这两个话题,希望能给你带来全新的视角和思考。

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

java 怎么将List里面数据排序

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

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();

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

arrayList1.add(2);//0

arrayList1.add("daas");//1

arrayList1.add(6);//2

arrayList1.add("1");//3

list.add(arrayList1);

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

//my code

String convert= String.valueOf(arrayList1.get(0));

arrayList1.remove(2);

arrayList1.remove(0);

arrayList1.add(convert);

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

Collections.sort(arrayList1);

for(int i= 0; i< arrayList1.size(); i++){

System.out.println(arrayList1.get(i));

}

结果为:

1

2

3

5

8

daas

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

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

String a= new String("Z");

String b= new String("A");

System.out.println(a.compareTo(b));

String c= new String("A");

String d= new String("B");

System.out.println(c.compareTo(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>();

list.add(e);

list.add(f);

list.add(h);

Collections.sort(list);

for(String i: list){

System.out.println(i);

}

结果为:

25

-1

e

g

h

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

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

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

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

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

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

祝心情愉快~~

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

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));

}

}

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

temp=hxr;//就是这里我不懂啊引用类型的只是调用引用这样编写会覆盖掉hxr

al.set(i, hxr1);

al.set(j, temp);

这段代码是利用中间变量temp把hxr和hxr1交换位置。

解释:

①hxr的初始位置在i,hxr1的初始位置在j

②先把hxr保存在中间变量temp中,

③再把hxr1放在位置i上,

④最后把hxr放在位置j上。

如果没有第②步的话,做第③步时hxr1对象就会把hxr对象覆盖了。

补充说明:

关于你说的这个:引用类型的只是调用引用这样编写会覆盖掉hxr

你在Eclipse里面单步调试一下就知道了。

做完第③步后,hxr1并没有把temp和hxr覆盖了。

这样看的话,没有中间变量temp也能完成交换。

出现这样的状况是因为java的引用类型是介于指针和引用之间的一个东西.

你把temp=hxr;去掉,并在al.set(i, hxr1);之前加上hxr.tickets= 2之类的话改变hxr的值,这是你再看看hxr的值与List al中第i个的值,再往下执行,好好观察每个变量的数值变换情况。

仔细体会一下,很快就会明白了!

好了,本文到此结束,如果可以帮助到大家,还望关注本站哦!

begintransaction?transaction.begin()和commit()都做了什么医院网站建设方案,大型医院网站的建设方案,,