【问题标题】:How to generate an arraylist automatically?如何自动生成数组列表?
【发布时间】:2014-03-01 15:57:42
【问题描述】:

我有一个循环搜索字典,提取我过滤的单词,然后将其放入 arrayList。然后我想优化我的搜索并从这个 arrayList 中提取单词并将其放在另一个中。有没有生成arrayList的方法?通常我正在尝试做的事情我可能不知道我可能需要多少个数组列表。

我有一个手机键盘,每个数字分配 3-4 个字母。例如数字 1(a,b,c)。我正在尝试编写一种方法,例如,当我输入 1234 时,我希望它借助程序可以访问的单词库来预测我要编写的单词。所以,当我按 1 时,我会从库中提取所有以 a、b 或 c 开头的唯一单词。然后,我考虑已按下的数字 2 (d,e,f),并从前一个列表中提取所有以 a、b、c 开头但具有第二个字符 d、e 或 f 的单词。我正在做的是尝试生成新的数组列表来放入新的过滤词。我只是不知道如何自动生成创建数组列表。

我的示例代码:

//cycles through each possible alaphabetical characters represented by the numbers that constitute "signature"
for (int countSignature = 0; countSignature < signature.length();countSignature++){
    if (signature.codePointAt(countSignature) == 50) {// Representing 2
        for (int j = 0; j < set1.size(); j++){    //iterating through the array for each word that starts with a,b, or c.
            if (arraySet1[j].codePointAt(countSignature) == 97
                    || arraySet1[j].codePointAt(countSignature) == 98
                    || arraySet1[j].codePointAt(countSignature) == 99) {

                arrayListSet2.add(arraySet1[j]);
                //need to generate new arrayList for the next round of filtering.
                f(j++)
            }
        }
    }else if(signature.codePointAt(countSignature) == 51){ // Representing 3
        for (int j = 0; j < set1.size(); j++) {
            if (arraySet1[j].codePointAt(countSignature) == 100
                    || arraySet1[j].codePointAt(countSignature) == 101
                    || arraySet1[j].codePointAt(countSignature) == 102) {

                arrayListSet2.add(arraySet1[j]);
            }
        }
    }else if(signature.codePointAt(countSignature) == 52){ // Representing 4
        for (int j = 0; j < set1.size(); j++) {
            if (arraySet1[j].codePointAt(countSignature) == 103
                    || arraySet1[j].codePointAt(countSignature) == 104
                    || arraySet1[j].codePointAt(countSignature) == 105) {

                arrayListSet2.add(arraySet1[j]);
            }
        }
    }else if(signature.codePointAt(countSignature) == 53){ // Representing 5
        for (int j = 0; j < set1.size(); j++) {
            if (arraySet1[j].codePointAt(countSignature) == 106
                    || arraySet1[j].codePointAt(countSignature) == 107
                    || arraySet1[j].codePointAt(countSignature) == 108) {

                arrayListSet2.add(arraySet1[j]);
            }
        }
    }else if(signature.codePointAt(countSignature) == 54){ // Representing 6
        for (int j = 0; j < set1.size(); j++) {
            if (arraySet1[j].codePointAt(countSignature) == 109
                    || arraySet1[j].codePointAt(countSignature) == 110
                    || arraySet1[j].codePointAt(countSignature) == 111) {

                arrayListSet2.add(arraySet1[j]);
            }
        }
    }else if(signature.codePointAt(countSignature) == 55){ // Representing 7
        for (int j = 0; j < set1.size(); j++) {
            if (arraySet1[j].codePointAt(countSignature) == 112
                    || arraySet1[j].codePointAt(countSignature) == 113
                    || arraySet1[j].codePointAt(countSignature) == 114 
                    || arraySet1[j].codePointAt(countSignature) == 115){

                arrayListSet2.add(arraySet1[j]);
            }
        }
    }else if(signature.codePointAt(countSignature) == 56){ // Representing 8
        for (int j = 0; j < set1.size(); j++) {
            if (arraySet1[j].codePointAt(countSignature) == 116
                    || arraySet1[j].codePointAt(countSignature) == 117
                    || arraySet1[j].codePointAt(countSignature) == 118) {

                arrayListSet2.add(arraySet1[j]);
            }
        }
    }else if(signature.codePointAt(countSignature) == 57){ // Representing 9
        for (int j = 0; j < set1.size(); j++) {
            if (arraySet1[j].codePointAt(countSignature) == 119
                    || arraySet1[j].codePointAt(countSignature) == 120
                    || arraySet1[j].codePointAt(countSignature) == 121
                    || arraySet1[j].codePointAt(countSignature) == 122) {

                arrayListSet2.add(arraySet1[j]);
            }
        }
    }else{
        System.out.println("");
    }
}

【问题讨论】:

  • 您可能需要重新考虑您的逻辑..
  • 逻辑不清楚。你需要更多地了解这一点。
  • 我在上面的编辑中添加了更多的 cmets,因为我无法在此处提供它们。

标签: java


【解决方案1】:

如果你不知道你需要的 ArrayList 的数量,可以创建一个 ArrayList 的 ArrayList,我们将它命名为 containerList。当您需要新的 itemList 时,创建新的 ArrayList 并将其添加到 containerList。

【讨论】:

    【解决方案2】:

    您确实为此使用了错误的数据结构。你需要的是一个看起来像这样的树结构(对于这个例子,让我们使用单词“Tree”、“Three”和“Try”

                          T
                     H         R
                     R      E      Y
                     E      E
                     E
    

    现在你可以沿着树向下走,如果他们已经输入了 T 和 R,那么你可以做一个简单的 treewalk 并确定那棵树,然后 try 是可能的单词。一旦你知道你会得到太多的结果,你也应该中止 treewalk。

    这种数据结构称为 Trie:http://en.wikipedia.org/wiki/Trie

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      相关资源
      最近更新 更多