Это звучит, как вы делаете что-то вроде этого:
Tile[][] matrix = new Tile[10][10];
//Some code to initialize matrix
for(int x = 0; x < matrix.length; x ++){
Tile[] row = matrix[x];
for(int y = 0; y < row.length; x ++){
Tile cell = row[y];
//Perform the 'operation' on cell
}
}
Если это так, то приведенный выше код будет O (N^2) * O ('Операция'). Это следует из того, что доступ к элементам массива равен O (1).
Если вместо этого вы имели списки вместо массивов, то вы должны написать код, как:
List<List<Tile>> matrix;
//Some code to initialize matrix
for(List<Tile> row : matrix){
for(Tile cell : row){
//Perform the 'operation' on cell
}
}
Это неявно использует итератор предоставленный список. Например, если List является ArrayList, итератор будет функционировать так же, как в первом примере. Если List является LinkedList, то итератор будет хранить ссылку на узел в текущем списке. Для оба вазы в LinkedList и ArrayList сложность остается: O (N^2) * O ('Операция')
Кода, который будет плох:
LinkedList<LinkedList<Tile>> matrix = new LinkedList<LinkedList<Tile>>();
//Some code to initialize matrix
for(int x = 0; x < matrix.size(); x ++){
LinkedList<Tile> row = matrix.get(x);
for(int y = 0; y < row.size(); x ++){
Tile cell = row.get(y);
//Perform the 'operation' on cell
}
}
Этот пример будет O (n^4) * O ('операция'), потому что каждый вызов LinkedList.get (x) является O (n). Повторите ту же операцию в массиве, или ArrayList - O (1).
Это зависит. Существует ли какая-либо переходная связь между значениями в массиве, или вы просто едете на велосипеде через каждое значение? Что вы намерены делать со значениями? – christopher
Это приводит к [преждевременной оптимизации] (http://en.wikipedia.org/wiki/Program_optimization#When_to_optimize). Беспокойство об этом, когда приложение. заметно замедлится. –
Разработка> Выполнить> Профиль> Решить. Вы хотите, чтобы ваш код запускался до того, как он сможет ходить ... – Gamb