java题:一百万个乱序数字排序,中间有重复的,但由于内存不够,不能一下存储100万个数,怎样才排序?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java题:一百万个乱序数字排序,中间有重复的,但由于内存不够,不能一下存储100万个数,怎样才排序?相关的知识,希望对你有一定的参考价值。

test.txt文件
内容如下:
4321542
54325325
65436543
23452
2345235
52345325
324532
35324532
.....

有一百万行数字,中间可能有重复,所有数字都小于 21亿
由于内存不够,不能一次性读取全部内容
怎样才能排序

求方法
有代码更好, 如果有代码 提高悬赏采纳~~

用Treeset不知道拼对不对..然后实现一个Comparable接口自动排序,set接口还不允许重复追问

我把问题补充完了

关键是不能重复,而且内存存不下

参考技术A 内存能容10000个数吗?先找出最大的1万个数,之后,以此类推! 参考技术B 一百万行不至于溢出吧。你文件大小多少? 还有你非配给java的内存大小是多少?追问

兄弟 这是 java题。。。。

追答

咳咳,哈哈,我知道是java 问题,你用的是list 存的吧,Arraylist 是没有限制的,因为它是一个接口动态分配大小,它的的范围依据你 初始定义的大小或者是动态分配,比如:

Arraylist list = new ArrayList<int>(10), 那它就是10. 你给java heap space分配的大小足够就不会溢出。


要么就是你读文件的时候有问题,你可以试试 BufferedInputStream

doc: http://docs.oracle.com/javase/7/docs/api/java/io/BufferedInputStream.html

            
                File file = new File(address);
BufferedInputStream bufferInput = null;
try 
bufferInput = new BufferedInputStream(new FileInputStream(file),
10 * 1024 * 1024);
 catch (FileNotFoundException e) 
JOptionPane.showMessageDialog(null, "No such file!");

BufferedReader input = new BufferedReader(new InputStreamReader(
bufferInput));
String str = null;
try 
while ((str = input.readLine()) != null) 
//list.add(str);


catch(...)...

追问

妹的    非说我字数超出!!

以上是关于java题:一百万个乱序数字排序,中间有重复的,但由于内存不够,不能一下存储100万个数,怎样才排序?的主要内容,如果未能解决你的问题,请参考以下文章

面试难题:用有限的内存对一百万个数字输入进行排序

树状数组。 数组修改某个元素的数值/求出前n个元素的和,需要在一百毫秒处理上百万个数字

一百万个结构数组,根据其中一项值排序,用双链表还是数组排序效率更好

一百万个结构数组,根据其中一项值排序,用双链表还是数组排序效率更好,请给出最快C或C++算法代码。

现在给你个乱序的1到n排列,请你计算需要操作多少次才可以使得原序列从小到大

用C++编程思想解决一道题