在我的追求继续我的Java教育我试图找出是否有一个本地的Java方法,快速和有效地允许查找一个ArrayList的数组中的字符串值。对数组ArrayList的反向查询
这里是我的代码,显示我想要做的事:
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。我的代码非常的最终目标是要做到以下几点:
- 阅读资产文本文件来加载的ArrayList
- 搜索的ArrayList为用户输入的值
- 做一些Calcs(计算)在相邻的数值搜索排
- 允许用户在搜索排
- 更新相邻值允许用户添加新行如果搜索字符串没有找到
- 保存更改回资产文本文件中的人phabetical为了
Airfix膨胀
有一些本地方法可以查找任何给定'Collection'的元素,但在这种情况下,您正在查看给定集合中的每个数组,所以没有原生方法。为了更简化,简洁和“声明式”算法,我会建议使用Java 8 lambda。 – Mena
如果您之前已经对集合进行了排序,则可以应用二进制搜索,它将以O(log n)而不是O(n)运行。此外,如果您发现一个匹配而不是运行其他所有列表和数组,则可以从搜索方法返回。 – Palle
另外我可能发现了一个bug:如果你检查字符串是否相等,你必须使用'firstString.equals(secondString)'-Method。如果两个String引用都指向内存中完全相同的位置,则== = -Operator只返回true。 – Palle