【问题标题】:Sort a 2D Array with primary key使用主键对二维数组进行排序
【发布时间】:2016-04-12 19:00:14
【问题描述】:

我正在尝试拆分文本文件的每一行并插入到数组列表中。

aa 04 cc ff gg rrr
aa 01 bb dd ee fff
aa 03 ff hh ee ttt
aa 05 dd ss ww ccc

1,如何将数字存储为整数,其余为数组列表中的字符串。 (当前代码抛出数字格式错误)。

2,当我使用Java集合插入数组时,是否可以根据整数进行排序?

到目前为止,我有,

List <Object> records = new ArrayList<Object>();
        bf = new BufferedReader(new FileReader(getFile()));
        String readLine;        

        while ((readLine = bf.readLine()) != null) {
            try {
                    List <Object> record = new ArrayList<Object>();

                    record.add(readLine.substring(flg_start, num_start).trim());
                    record.add(Integer.parseInt(readLine.substring(num_start-1, fld_start-1).trim())); // converting string to int and saving to record list, throwing Number Format Error.

让我重新表述我的问题, 如何将记录 [1] 设置为整数并其余为字符串? 添加到数组时可以使用什么集合框架进行排序? 我期望我的数组中的最终结果是大约 1M 条记录的排序列表

aa 01 bb dd ee fff
aa 03 ff hh ee ttt
aa 04 cc ff gg rrr
aa 05 dd ss ww ccc

【问题讨论】:

  • 您发布了一些要求和一些代码,但没有告诉我们实际的问题或问题是什么。
  • 我怀疑存在索引问题。尝试将子字符串结果存储在单独的变量中并检查它们(通过日志记录或使用调试器)。
  • @tnw,我在代码下方再次更新了问题
  • 我个人无法理解您的问题。我猜你需要一个带有整数键和字符串(或 List,我不知道)值的映射。但我不能确定,因为我无法理解这个问题。如果您编写了您希望拥有的示例输出(就像您对示例输入所做的那样),这将有所帮助。
  • @Yaroslav Rudykh,更新了预期结果

标签: java arrays collections


【解决方案1】:

至于数据结构,您需要 TreeMapInteger 键和 List 值。您应该阅读该文件并按照@HaridwarJha 的描述解析每一行,并为每一行放置新的值,其中包含解析后的Integer 键和List 由解析值组成的值。使用TreeMap,您的数据将按键排序,即按您文件中的Integer 值。

Map<Integer, List<Object>> map = new TreeMap<Integer, List<Object>>();
while((line=reader.readLine())!=null){
    List<Object> row = new ArrayList<>();
    String[] strArray=line.split(" ");
    row.add(strArray[0]);
    row.add(strArray[1]);
    row.add(strArray[2]);
    row.add(strArray[3]);
    row.add(strArray[4]);
    row.add(strArray[5]);
    map.put(new Integer(row.get(1)), row);
}

【讨论】:

  • 我正在考虑使用 Treemap 进行自动排序。对于插入数组,在性能方面是个好主意吗?因为这个文件包含 100 万行。
  • 或者我用一类变量定义 Treemap 更好?
  • TreeMap 是一种相当高效的结构:containsKey、get、put 和 remove 操作的 log(n) 时间成本。所以我会先尝试一下,测试一下,如果有性能问题,我会考虑其他一些数据结构。我不确定“具有一类变量的树图”是什么意思。您所说的“任何带有 2D TreeMap 的伪代码都可以对其进行排序”是什么意思。 TreeMap 已经排序,不需要显式排序。
【解决方案2】:

您可以这样做并访问 strArray,您可以使用 for 循环,也可以使用 regex[0...1] 进行解析.... 这是一个简单的...试试看 公共静态无效主要(字符串[]参数){ 列出记录 = new ArrayList();

    File file=new File("File Location");
    try {
        BufferedReader reader=new BufferedReader(new FileReader(file));
        String line;
        while((line=reader.readLine())!=null){
            String[] strArray=line.split(" ");
            records.add(new Integer(strArray[1]));
            records.add(new String(strArray[0]));
            records.add(new String(strArray[2]));
            records.add(new String(strArray[3]));
            records.add(new String(strArray[4]));
            records.add(new String(strArray[5]));
        }
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    for(Object tmp:records){
        System.out.println(tmp);
    }
}

【讨论】:

    猜你喜欢
    • 2013-08-17
    • 1970-01-01
    • 2015-09-17
    • 2015-09-16
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多