2017-03-02 4 views
-1

入力されたmyプログラムは、行列の行を表す文字列です。この行列の列をLinkedHashMapに配置したいが、最初は配列のすべてを格納せずに、列を作成してLinkedHashMapに配置します。これはできるだけ早く行うべきであるという考え方です。文字列を配列に格納する前にHashMapに文字列を挿入する方法はありますか?

例:

入力:

のLinkedHashMapに保存する必要があり、文字列を

grgaa

rtwag

をabfad

は以下のとおりです。

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

文字列の1次元配列を使用して分割しないで、[charAt'](http://docs.oracle.com/javase/7/docs/api/)で個々の文字にアクセスしてみることもできますjava/lang/String.html#charAt(int))を内部ループ内に作成します。また、 '+ ='で追加するのではなく、 'StringBuilder'を使うことを考慮する必要があります。行を読み込んだ直後にマップに文字を格納することもできます(各行の読み込み後にマップに格納された文字列に追加する) - これらのアプローチのいずれかが十分であるかどうかをテストする必要があります – UnholySheep

答えて

1

なぜこれがダウンリストされているのか分かりません。

これは面白い問題だと思います。

これを行列のリアルタイム変換と考えると役立ちますか?最初の行を読むときにどうしたらよいでしょうか?後続の各行で何が起こるべきですか?すべての行が同じ長さであると仮定しています。そうでなければ、そうでなければ何が起こるかを指定する必要があります。

あなた自身で試してみたら、以下をご覧ください。私は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

関連する問題