import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
/*
*1.分析以下需求,并用代码实现:
* (1)生成10个1至100之间的随机整数(不能重复),存入一个List集合(可以先不适用泛型,泛型明天讲)
*(2)编写方法使用冒泡或选择排序对List集合进行排序,(禁用Collections.sort方法和TreeSet)
*(2)然后利用迭代器遍历集合元素并输出
*(3)如:15 18 20 40 46 60 65 70 75 91
*
*/
public class Test3 {
public static void main(String[] args) {
// 1,创建集合和生成随机数的对象
List list = new ArrayList();
Random r = new Random();
// 2,生成10个随机数,添加到list
while (list.size() < 10) {
int i = r.nextInt(100) + 1; //生成1-100的随机数
if (!list.contains(i)) { //如果集合中没有就添加
list.add(i);
}
}
//排序前
System.out.println(list);
//3,遍历
// selectSort(list); //方法1
bubbleSort(list); //方法2
//4,迭代
Iterator it = list.iterator(); //获取迭代器
while (it.hasNext()) { //如果还有元素
System.out.print(it.next() +" "); //下一个元素加空字符串
}
}
/*
* 由于要求自己使用方法进行排序
*
* 返回值:void
* 参数列表:List
*
* 思路1:
* 1,将集合转换为数组;
* 2,对数组进行排序;
* 3,清空数组;
* 4,将数组元素添加到集合中
*/
public static void selectSort(List list) {
//1,将集合转换为数组
Object [] obj = list.toArray();
//2,类型转换
int [] arr = new int[obj.length];
for (int i = 0;i<arr.length;i++ ) {
arr[i] = (int) obj[i];
//System.out.println(arr[i]);
}
//3,对int数组进行排序select
int temp;
for (int i = 0; i < arr.length; i++) { //控制循环次数
for (int j = i+1; j < arr.length-1; j++) { //控制比较次数
if(arr[i] > arr[j]) { //如果前边大于后边
temp = arr [i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//4,清空原集合
list.clear();
//5,将全部元素添加到集合
for (int i : arr) {
list.add(i);
}
}
/*
* 思路2:直接在集合中进行排序(bubbleSort)
* 1,使用两个变量分别记录相邻的元素;
* 2,对两个元素进行比较
*如果x > y, 将x添加到y角标后, 将原来的y删除
*如果x < y,继续比较
*/
public static void bubbleSort(List list) {
for (int i = 0; i < list.size()-1; i++) { //控制循环次数
for (int j = 0; j < list.size()-1-i; j++) { //控制比较次数
int x = (int) list.get(j); //通过角标获取元素后类型转换并记录
int y = (int) list.get(j+1);
if (x > y) {
list.add(j+2, x); //将大元素添加到小元素之后
list.remove(j); //将原来的删除
}
}
}
}
}
|