1

これでは、単語を1つの配列リストに格納し、それに対応するそれぞれの電話番号を別の配列リストに格納しています。数字を入力して、対応する他のリストのすべての単語を返すことができるようにしたいと思います。アレイリストをこのように設定しています。

List<String> listWords = new ArrayList<String>(); // An ArrayList which stores all added words.
List<String> listNum = new ArrayList<String>();// An ArrayList which stores all phone numbers that correspond to all the added words

単語は、電話のキーパッドの場合と同じように変換されます(つまり、2 = a、b、c 3 = d、e、fなど)。

また、私はこのように単純に単語を追加しています。

public void readWords() 
{
    PhoneWords ph = new PhoneWords();
    try
    {
        // Open the file that is the first 
        // command line parameter
        FileInputStream fstream = new FileInputStream("words.txt");

        BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
        String strLine;

        //Read File Line By Line
        while ((strLine = br.readLine()) != null)   
        {
            String phNum = ph.word2Num(strLine);
            listWords.add(position, strLine);
            listNum.add(position, phNum);
            position++; // index position, only used when initally adding the words
        }

    }catch (Exception e)
    {
        //Catch exception if any
        System.err.println("Error: " + e.getMessage());
    }
4

1 に答える 1

1

あなたの場合、電話番号を単語のリストにマップする次のデータ構造を使用したいと思います

HashMap<String, List<String>> phoneNumbersMap = new HashMap<String, List<String>>();

HashMapのリファレンスはこちらhttp://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html

また、将来リストが大きくなった場合でも、単語の取得がはるかに高速になります。

HashMapにデータを追加するには、次の操作を実行できます。

if (map.containsKey(phNum)) {
    List<String> words = map.get(phNum);
    words.add(strLine);
} else {
    List<String> words = new ArrayList<String>();
    words.add(strLine);
    map.put(phNum, words);
}
于 2013-03-25T01:41:50.640 に答える