Java中的ArrayList怎么进行冒泡排序 java对Arraylist冒泡排序,怎么合理调用一个函数实...

作者&投稿:甫寒 (若有异议请与网页底部的电邮联系)

java中的ArrayList进行冒泡排序,主要是循环遍历取出数据,然后进行比较排序,如下代码:

package com.qiu.lin.he;

import java.util.ArrayList;

public class Ceshi {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
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 < list.size() - 1; i++) {
for (int j = 1; j < list.size() - i; j++) {
Integer a;
if (list.get(j - 1).compareTo(list.get(j)) > 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的数据
}
}
}

运行结果如下:



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个的值,再往下执行,好好观察每个变量的数值变换情况。
仔细体会一下,很快就会明白了!

楼上的真倒,虽然算法是一样的,但是人问的是JAVA中ArrayList对象的冒泡排序,你却搞个C的出来,好歹也改下啊.
---------------------------------------------------------
//main()方法自己写吧,为了方便,假定ArrayList存放的是Integer对象
//另外,代码是给你写了!但是希望以后不要看到你再上来让人帮你写代码了,把自己写的代码贴上来让人帮你改倒还可取.
public class Sort {
public static void bubbleSort(List list)
{
int size = list.size;
Integer[] arr = (Integer[])list.toArray();//你的类实现Comparable接口后,这里的类型换下就是了.
Integer iTmp;

for (int i = 1; i < size; i++)
{
boolean flag = false;
for (int j = size - 1; j >= i; j--)
{
if (arr[j].compareTo(arr[j - 1]) > 0)
{
iTmp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = iTmp;
flag = true;
}
}
if (!flag) return;
}
}
}
===================================
问题补充的回复:
让你的类实现Comparable接口即可.
Arrays和Collections里的sort方法都没有用冒泡排序的,因为冒泡排序效率实在太低了.只能用来作算法演示而已,实际应用中不会用到它的.

#include<stdio.h>
#include<conio.h>
#define TURE 1
#define FLASE 0
void BubbleSort(int a[],int n)
{
int i,j;
int change;
int temp;
for(i=n-1,change=TURE;i>=1&&change;i--)
{
change=FLASE;
for(j=1;j<=i;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
change=TURE;
}
}
}
void Print(int a[],int n)
{
int i;
for(i=1;i<=n;i++)
printf(" a[%d]=%d",i,a[i]);
}
main()
{
int a[100];
int i,n;
printf("\nInput the Length:\n");
scanf("%d",&n);
printf("\nInput the number:\n");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
printf("\nBefore:\n");
Print(a,n);
BubbleSort(a,n);
printf("\nAfter:\n");
Print(a,n);
getch();
printf("Press any key to continue...");
clrscr();
}

记得arraylist里面有个sort方法,就可以进行排序了,为啥还要用冒泡呢!?如果真的要做冒泡的话,你用下标来取值进行比较咯

用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

你的两个set()第一个参数都是 j,第二个改为j+1吧

在Java中怎样把数组转换为ArrayList
答:2.将数组拷贝到ArrayList中称为”elementData”的数组中 ArrayList的构造方法的源码如下:?1234567 public ArrayList(Collection<? extends E> c) { elementData = c.toArray(); size = elementData.length; if (elementData.getClass() != Object[].class) elementData = Arrays.copyOf(e...

java中如何创建动态数组
答:{ //Java动态数组的初始化 ArrayList al=new ArrayList();//向Java动态数组中添加数据 al.add("a");al.add("b");al.add("c");//输出Java动态数组 for(int i=0;i<al.size();i++){ String alEach=(String)al.get(i);System.out.println(alEach);} //删除数组中的某个元素,删除...

java中关于ArrayList<> 的用法。
答:可以,但是要用包装类型的 i nt用Integer double 用double float 用Float 然后,就可以了 eg. List<Integer> l = new ArrayList<Integer>();l.add(5);

Java中List和ArrayList的区别
答:List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。它继承 Collection。List有两个重要的实现类:ArrayList 和 LinkedList ArrayList:我们可以将其看作是能够自动增长容量的数组。利用ArrayList的toArray()返回一个数组。Arrays.asList()返回一个列表。1.ArrayList底层采用数组实现,当...

JAVA中怎么样把ArrayList中存的数据打印出来?
答:重写toString方法,在自定义类中重写toString方法,组装自己的格式。ArrayList在它的父类AbstractCollection中重写了toString方法,该方法用Iterator的方式遍历自己的集合。遍历时直接把元素加入到了StringBuilder中,这样相当于调用元素的toString方法。举个例子:import java.util.ArrayList;import java.util.List;...

java中char类型的Arraylist如何转化成一个string?
答:java中char类型的arraylist转化成String,可以将Arrayli进行逐个遍历,每个字符转换成string类型,如下:package secondpackage;import java.util.ArrayList;import java.util.List;/** * * @author 你好邱林和 * @date 2015年12月17日09:12:09 * */public class ceshi2 {public static void main...

Java写方法的时候想把arraylist作为形参怎么弄?
答:List是接口,ArrayList实现了List接口,所以可以利用多态,把Arraylist作为形参。public static void method(List list){ System.out.println(list);} public static void main(String[] args) { List list = new ArrayList();list.add("1");list.add("2");list.add("3");method(list);} ...

java如何对ArrayList中对象按照该对象某属性排序
答:有几个方法可以实现:让 Student 实现Comparable接口,或是实例化一个比较器,现在用 Comparator 比较器实例来做一个:ComparableTest.java import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;public class ComparableTest { public static void main(String[] args) { Co...

Java中List和ArrayList的区别
答:Java中List和ArrayList的区别总结如下:1 从类的层次结构上 List 是接口,成为有序的 Collection 也就是序列。该接口可以对列表中的每一个元素的插入位置进行精确的控制,同时用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。ArrayList:List 接口的大小可变数组的实现。它实现...

JAVA中的List、Vector、ArrayList的差异
答:Java 中Vector、ArrayList和LinkedList 的区别Java 中Vector、ArrayList和LinkedList 的区别SDK提供了有序集合接口java.util.List的几种实现,其中三种最为人们熟知的是Vector、ArrayList和LinkedList。有关这些List类的性能差别是一个经常被问及的问题。在这篇文章中,我要探讨的就是LinkedList和Vector/ArrayLis...