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

java.util.Collections类中有 sort public static
用Java中ArrayList类实现一个冒泡排序
经测试,已成功!
import java.util.ArrayList;
public class Test1{
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());
}
}
}2010-05-21
java.util.Collections类中有
sort
public static <T extends Comparable<? super T>> void sort(List<T> list)根据元素的自然顺序 对指定列表按升序进行排序。列表中的所有元素都必须实现 Comparable 接口。此外,列表中的所有元素都必须是可相互比较的(也就是说,对于列表中的任何 e1 和 e2 元素,e1.compareTo(e2) 不得抛出 ClassCastException)。
此排序方法具有稳定性:不会因调用 sort 方法而对相等的元素进行重新排序。

指定列表必须是可修改的,但不必是大小可调整的。

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

参数:
list - 要排序的列表。
抛出:
ClassCastException - 如果列表包含不可相互比较 的元素(例如,字符串和整数)。
UnsupportedOperationException - 如果指定列表的列表迭代器不支持 set 操作。
另请参见:
Comparable

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

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

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

参数:
list - 要排序的列表。
c - 确定列表顺序的比较器。null 值指示应该使用元素的自然顺序。
抛出:
ClassCastException - 如果列表中包含不可使用指定比较器相互比较 的元素。
UnsupportedOperationException - 如果指定列表的列表迭代器不支持 set 操作。
另请参见:
Comparator2010-05-21
public static void main(String[] args) {
// TODO Auto-generated method stub
List list=new ArrayList();
list.add(1);
list.add(32);
list.add(4);
list.add(22);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
for(int i=0;i<list.size();i++){
for(int j=0;j<list.size()-i-1;j++){
String c1=String.valueOf(list.get(j));//把object 类型转换成字符型
String c2=String.valueOf(list.get(j+1));
int v1=Integer.valueOf(c1);//再转换成整形
int v2=Integer.valueOf(c2);
if(v1>v2){
int temp=v2;//设置中间变量,调换两数位置
list.set(j+1, v1);
list.set(j, temp);
}
}
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i));
}
}

}2010-05-21
public void printSeqArrayList(List<Long> unit1) {

int i, j;
int n = unit1.size()-1;
Boolean exchange; // 交换标志
for (i = 0; i < n; i++) { // 最多做n-1趟排序
exchange = false; // 本趟排序开始前,交换标志应为假
for (j = n - 1; j >= i; j--) { // 对当前无序区R[i..n]自下向上扫描
if (unit1.get(j) > unit1.get(j + 1)) {
Long iTemp = new Long(0);
iTemp = unit1.get(j + 1);
unit1.set(j + 1, unit1.get(j));
unit1.set(j, iTemp);
exchange=true;
}
}
if (!exchange) // 本趟排序未发生交换,提前终止算法
break;
}
for (i = 0; i <= n; i++) {
System.out.print(unit1.get(i));
System.out.print(",");
}
}

附:冒泡排序:(将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。)2010-05-21
mengvlog 阅读 102 次 更新于 2025-07-19 12:36:56 我来答关注问题0
  •  翡希信息咨询 Java中Vector和ArrayList的区别

    Java中Vector和ArrayList的主要区别如下:实现方式:ArrayList:是基于数组实现的,它的初始容量可以在创建时进行指定,如果不指定,则使用默认值。随着元素的增加,ArrayList的容量会自动增长。Vector:同样基于数组实现,但与ArrayList不同的是,Vector是Java早期版本中的同步容器类,其方法大多使用了synchronized...

  •  翡希信息咨询 java怎么用一行代码初始化ArrayList

    在Java中,可以使用一行代码来初始化一个ArrayList,具体代码如下:ArrayList list = new ArrayList;其中,Type代表你想要在ArrayList中存储的数据类型。这里有几个关键点需要注意:泛型:为了保持类型安全,通常会在初始化时指定ArrayList中存储的元素类型。如果不指定类型,也可以使用原始的ArrayList类...

  •  翡希信息咨询 如何删除arraylist中的一个元素java

    根据元素值删除:使用remove方法,该方法会移除列表中第一个出现的指定元素。如果元素不存在,则列表不会发生改变。示例代码:javaArrayList list = new ArrayList;String a = "aaa";list.add;list.remove; // 根据对象值 "aaa" 删除元素2. 根据索引删除: 使用rem...

  • 在Java编程中,ArrayList集合的扩容通过其内置的自动扩展机制实现。具体说明如下:自动扩容机制:当ArrayList的存储空间不足时,ArrayList会自动创建一个新的、容量更大的数组。新数组的容量通常是原数组容量的1.5倍。元素复制:创建新数组后,ArrayList会将原数组中的所有元素逐一复制到新数组中。这一步骤确...

  •  阿暄生活 javaarraylist和linkedlist的区别 javaarray

    ArrayList和LinkedList都不是线程安全的。如果在多线程环境下使用,需要进行额外的同步处理,或者使用Java提供的线程安全的集合类,如CopyOnWriteArrayList等。Java Array的相关知识:Java中的数组是一种固定大小的数据结构,用于存储相同类型的元素。数组一旦创建,其大小就不能改变。数组在内存中是连续存储的,...

檬味博客在线解答立即免费咨询

Java相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部