反向查找Array值的数组列

时间:2016-04-28 16:33:15

标签: java arrays arraylist

在我继续我的java教育的过程中,我试图找出是否存在一种快速有效地允许在数组的ArrayList中查找字符串值的本机java方法。

这是我的代码,显示了我尝试做的事情:

 public void exampleArrayListofArray () {
        ArrayList<String []> al = new ArrayList<>();
        al.add(new String[] {"AB","YZ"});
        al.add(new String[] {"CD","WX"});
        al.add(new String[] {"EF","UV"});
        al.add(new String[] {"GH","ST"});
        al.add(new String[] {"IJ","QR"});
        al.add(new String[] {"KL","OP"});
        displayArrayListofArray(al);
    }

    public void displayArrayListofArray(List<String []> al) {

        for (String [] row : al)
            for (int column = 0; column <= 1 ; column ++){
                System.out.println("Value at Index Row " + al.indexOf(row) +
                        " Column " + column + " is " + (row)[column]);
            }

        String lookUpString = "YZ";
        lookUpMethod(al, lookUpString);
        lookUpString = "ST";
        lookUpMethod(al, lookUpString);
        lookUpString = "IJ";
        lookUpMethod(al, lookUpString);
        lookUpString = "AA";
        lookUpMethod(al, lookUpString);
    }

    public void lookUpMethod(List<String []> al, String lookUpString) {
        boolean isStringFound = false;
        for (String[] row : al) {
            for (int column = 0; column <= 1; column++) {
                if (al.get(al.indexOf(row))[column] == lookUpString) {
                    System.out.println("Index of '" + lookUpString + "': " + al.indexOf(row) + column);
                    isStringFound = true;
                }
            }
        }
        if (!isStringFound) {
            System.out.println("Search string '" + lookUpString + "' does not exist.");
        }
    }

这是搜索给定字符串的ArrayList的最有效方法吗? 我应该做些什么来提高我的代码效率(除了不使用ArrayList)?

我知道也许要做我在这里尝试做的事情,可能有更有效的方法来做这个比一个ArrayList,如HashMap,但我目前非常有限的Java知识,我正在取得进展使用ArrayList,必须使用HashMap从头开始。我的代码的最终目标是执行以下操作:

  1. 读取资产文本文件以加载ArrayList
  2. 在ArrayList中搜索用户输入的值
  3. 使用搜索行中的邻近值执行一些计算
  4. 允许用户更新搜索行中的邻近值
  5. 如果找不到搜索到的字符串,则允许用户添加新行
  6. 按字母顺序将所有更改保存回资产文本文件
  7. Airfix膨胀

1 个答案:

答案 0 :(得分:1)

我的回答是:别担心。

我认为你是从错误的角度看待这个问题:如果你发现应用程序的用户有“性能”问题;如果你然后进行分析,然后分析显示你当前的“搜索”代码是“罪魁祸首”(杀死“最终用户感知性能”的单个热点);那么你将不得不咬紧牙关,学习使用不同于ArrayLists的数据结构。 (注意那里:实际上,Set / HashSet并没有太大的“不同”;学习如何使用它们......并不像听起来那么重要。)

但是:如果你用“不”回答了上述任何一个“问题”(比如:你没有抱怨性能不好的用户)......那么就没有必要担心性​​能了。

长话短说:要么性能真的是一个问题 - 那么你必须解决它。否则:不要试图修复没有破坏的东西。

(如上所述:从学习的角度来看,我仍然鼓励你保存代码;并启动一个使用集合的新版本。有很多教程可以解释你需要知道的所有事情。)< / p>

但只是为了给你一些方向:你的主要“表现”杀手是(正如你自己认为的)数据结构的不当使用。使用ArrayList存储要搜索的字符串数组没有任何优势。这增加了“两层”;每个都要求您的代码以顺序方式迭代这些“列表”。如果你要使用单个Set(如HashSet);并将所有“搜索字符串”添加到该集合中,对匹配项进行全部“查找”...归结为询问该集合:“您是否包含此值”。