У меня есть строковые массивы массивов.
List<String[]> mainList = new ArrayList<String[]>();
String[] row1 = {"foo", "bar", "moo"}
String[] row2 = {"cocoa", "zoo", "milk", "coffee"}
mainList.add(row1);
mainList.add(row2);
Допустим, я хочу найти элемент "молоко".
Я мог бы сделать с N ^ 2.
for(int i=0, j=mainList.size(); i<j; i++) {
for(int x=0, y=mainList.get(i).length(); x<y; x++) {
String item = mainList.get(i)[x];
if(item.equals("milk")) {
return true; //found milk
}
}
}
Я попытался сделать это быстрее, поместив все элементы в качестве ключа карты.
//put all elements to map key
Map m = new HashMap<String, String>();
for(int i=0, j=mainList.size(); i<j; i++) {
for(int x=0, y=mainList.get(i).length(); x<y; x++) {
m.put(mainList.get(i)[x], "whatever");
}
}
//now iterate and see if key "milk" is found
if(m.contains("milk")) { return true; }
Но я решил, что это все еще N ^ 2 (то есть для цикла внутри цикла forтак как количество строк, добавляемых в mainList, например row3 ['item1', 'item2', 'item3'], увеличивается итерация в N ^ 2)
как я могу оптимизировать это без N ^ 2?