【问题标题】:Sorting integers in a file without using collections java在不使用集合java的情况下对文件中的整数进行排序
【发布时间】:2016-11-08 19:55:43
【问题描述】:

我需要在不使用数组/数组列表的情况下对文件中的整数进行排序。该文件必须使用 RandomAccessFile 读取。除了使用数组列表之外,我想不出任何方法来解决这个问题。我被允许使用一些变量。另外,如何交换文件中的两个数字?

import java.io.*;

class Sort
{
    public static void main(String[] args)
    {
        try {
            RandomAccessFile abc = new RandomAccessFile(args[0], "rw");
            long n = abc.length();
            System.out.println(n);
            long i = 0;
            while (i <= n) {
                System.out.println("Coming Here");
                int c = Integer.parseInt(abc.readUTF());
                System.out.println(c);
                i = i + 1;
            }
        } catch (IOException e) {
            System.out.println(e);
        }
    }
}

【问题讨论】:

  • 你试过什么?你检查过文档吗? docs.oracle.com/javase/8/docs/api/java/io/RandomAccessFile.html
  • A RandomAccessFile 基本上是磁盘上的一个数组,所以就这样对待它。
  • @AdrianK。我已经从文件中读取整数并将它们写回。我无法弄清楚如何在不使用其他数据结构的情况下对数字进行排序。文档并没有真正的帮助。
  • 那么请也提供您的代码。另外,你是怎么在 2 分钟内读完文档的?
  • @GhostCat 是的,有点。但我实际上尝试解决这个问题

标签: java file sorting io randomaccessfile


【解决方案1】:

首先,由于文本数字表示的长度不同,当文件中的文本包含整数时,任务会很困难。

  • 首先应检查数据是否为二进制。

所以我假设包含int 的二进制数据存储在文件中。 一个javaint占用4个字节,所以每个文件位置都是四折。

所以你可以使用数组。如果是所有人的数组,Arrays.sort 会解决它。否则几个数组和归并排序算法将是可行的。

使用随机访问文件,您可以使用以下方法进行快速排序或合并排序:

fh.seek(i1*4L);
int n1 = fh.readInt();
// If ints are not stored in big endian byte order:
// int n1littleEndian = Integer.reverse(n1);

在生产环境中,我们会获取关联的通道,并使用内存映射字节缓冲区;加快速度。

【讨论】:

  • 我想对文件本身的整数进行排序,也不使用数组
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多