在我继续我的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从头开始。我的代码的最终目标是执行以下操作:
Airfix膨胀
答案 0 :(得分:1)
我的回答是:别担心。
我认为你是从错误的角度看待这个问题:如果你发现应用程序的用户有“性能”问题;如果你然后进行分析,然后分析显示你当前的“搜索”代码是“罪魁祸首”(杀死“最终用户感知性能”的单个热点);那么你将不得不咬紧牙关,学习使用不同于ArrayLists的数据结构。 (注意那里:实际上,Set / HashSet并没有太大的“不同”;学习如何使用它们......并不像听起来那么重要。)
但是:如果你用“不”回答了上述任何一个“问题”(比如:你没有抱怨性能不好的用户)......那么就没有必要担心性能了。
长话短说:要么性能真的是一个问题 - 那么你必须解决它。否则:不要试图修复没有破坏的东西。
(如上所述:从学习的角度来看,我仍然鼓励你保存代码;并启动一个使用集合的新版本。有很多教程可以解释你需要知道的所有事情。)< / p>
但只是为了给你一些方向:你的主要“表现”杀手是(正如你自己认为的)数据结构的不当使用。使用ArrayList存储要搜索的字符串数组没有任何优势。这增加了“两层”;每个都要求您的代码以顺序方式迭代这些“列表”。如果你要使用单个Set(如HashSet);并将所有“搜索字符串”添加到该集合中,对匹配项进行全部“查找”...归结为询问该集合:“您是否包含此值”。