2017-03-02 17 views
-1

我的程序得到的输入是一些表示矩阵中的行的字符串。我想把这个矩阵的列放在一个LinkedHashMap中,但是不需要先将所有的数据都存储在一个数组中,然后构造这些列并将它们放到LinkedHashMap中。这个想法应该尽可能快地完成。如何在将字符串存储在数组中之前将其放入HashMap中?

实施例:

输入:

abfad

grgaa

rtwag

应保存在LinkedHashMap中的字符串是:

AGR

BRT

FGW

AAA

DAG

编辑:

这是我的节目是怎么做的现在:

String[][] array = new String[n][m]; 
LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>(); 
for (int i = 0; i < n; i++) { 
     array[i] = br.readLine().split(""); 
} 
for (int i = 0; i < m; i++) { 
    String column = ""; 
    for (int j = 0; j < n; j++) { 
     column += array[j][i]; 
    } 
    map.put(i, column); 
} 
+0

到目前为止,您尝试过做什么?显示你的代码并解释你有什么问题 – UnholySheep

+0

我将单个字符存储在一个数组中,然后附加列并将它们存储在LinkedHashMap中,请参阅编辑。我的程序运行速度太慢,这是我可以改进我的程序的唯一部分。 – tomishomo

+0

那么,你可以尝试使用一维字符串数组(而不是分割),然后通过['charAt']访问各个字符(http://docs.oracle.com/javase/7/docs/api/ java/lang/String.html#charAt(int))。你也应该考虑使用'StringBuilder'而不是通过'+ ='追加。你可以尝试的另一件事是在你读完这行之后将字符存储在地图中(并且在每行读取之后追加到存储在地图中的字符串) - 你必须测试这些方法是否足够好 – UnholySheep

回答

1

我不知道为什么这是downvoted。

这是一个有趣的问题,你应该问好一点。

如果您认为这是矩阵的实时变换,这有帮助吗?当你读第一行时会发生什么?每一个后续行应该发生什么?我们假设所有行都具有相同的长度,否则我们需要指定它们不在时发生的情况。

当你自己尝试后,也许你可以看看下面。我还没有使用LinkedHashMap那里,我也使用了可变的StringBuilder。但是您可以轻松修改它以使用您选择的数据结构。

public class RealTimeTransform { 
    public static void main(String[] args) throws IOException { 
     Map<Integer, StringBuilder> columns = new HashMap<>(); 
     readColumnsFromRows(columns, System.in); 
     System.out.println(columns.values()); 
    } 

    private static void readColumnsFromRows(Map<Integer, StringBuilder> columns, InputStream in) throws IOException { 
     BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
     int rc = 0; 
     String row; 
     while ((row = reader.readLine()) != null) { 
      if (rc == 0) { 
       for (int i = 0; i < row.length(); i++) { 
        columns.put(i, new StringBuilder(10).append(row.charAt(i))); 
       } 
      } else { 
       for (int i = 0; i < row.length(); i++) { 
        columns.get(i).append(row.charAt(i)); 
       } 
      } 
      rc += 1; 
     } 
    } 
} 

此打印:

aman 
plan 
yess 
[apy, mle, aas, nns] 

按您的规范。

+0

使用StringBuilder作为其他人的评论,我的程序确实变得快得​​多。对于我面对的特定问题,我需要使用LinkedHashMap,但问题对于HashMap来说是相同的。谢谢你的时间。 – tomishomo

相关问题