本帖最后由 冥夜 于 2014-11-29 01:52 编辑
需要对ArrayList<Integer>进行排序,禁止使用Collections和TreeSet。
很容易想到的是像操作数组一样进行冒泡排序,然后也做出来了。
现在楼主有一个新思路:
1.创建一个新的ArrayList<Integer>数组
2.遍历原集合寻找最小值。
3.将该最小值加入新集合然后将该最小值从原集合删除直到原集合中所有元素都被删除
4.返回新集合
因为每次寻找的都是原集合的最小值,然后依次加入的新集合,新的集合自然就是从小到大排。这样就完成了对List数组的排序。
以下是代码
private static ArrayList<Integer> sort(ArrayList<Integer> al)
{
ArrayList<Integer> nal=new ArrayList<Integer>();//创建一个新ArrayList集合
int min=10;//用于保存最小值。假设原集合最大值为10
int num;//用于存储从数组中取出的数
while(!al.isEmpty())//如果原集合不为空则继续
{
for(Iterator<Integer> it=al.iterator();it.hasNext();)//遍历集合寻找最小值
{
if((num=it.next())<min)//如果获取的值比min小就将其赋值给min
min=num;
}
if(al.remove((Integer)min))//从原集合删除最小值
nal.add((Integer)min);//将得到的最小值加入新集合
}
return nal;
}
然后问题在于,只要一运行程序就无法停止直到内存溢出。。请问下是什么原因?
很感谢大家,已经有大神找到原因。原因在于在删除元素后,因为min并未进行重置而导致每次都在删除不存在的min并添加,由此进入死循环而导致内存溢出。
|