2015-04-20 5 views
3

Итак, у меня есть этот метод. Это создает 2D-массив.Хранить 2D-массив в массиве?

public static int[][] createCacheArray(int cacheSize, int blockSize, int[] memory, int i) { 

    //Create multi-dimension array for cache. 

    int [][] cache = new int [cacheSize/blockSize][blockSize]; 

    for (int column = 0; column < blockSize; column++) { 
     for (int row = 0; row < cache.length; row++) { 
      cache[row][column] = memory[i]; 
      i++; 
     } 
    } 

    return cache; 

} 

Я хотел бы сохранить созданный Cache 2D массив в массив 1D, потому что я буду делать несколько 2D массивов кэша с помощью этой же методы, и я хотел бы организовать их.

В основном я хочу перейти к массиву [число], где расположен массив Cache 2D, а затем прочитать содержимое этого массива 2D-кэша. Если есть еще один метод, я бы с удовольствием его оценил.

Другой способ сделать это состоит в следующем:

cache = createCacheArray(cacheSize, blockSize, memory, (cacheSize * 0)); 
 
cache1 = createCacheArray(cacheSize, blockSize, memory, (cacheSize * 1)); 
 
cache2 = createCacheArray(cacheSize, blockSize, memory, (cacheSize * 2)); 
 
cache3 = createCacheArray(cacheSize, blockSize, memory, (cacheSize * 3));

Здесь кэш 2D массив, кэш1 является 2D массив, кэш 2 представляет собой 2D массив и так далее, но это неудобно. Причина, по которой они запрашиваются, заключается в том, что это фиксированные 64x16 2D-массивы. Если массив заполняется, тогда я должен сделать другой 2D массив с одинаковым размером. Вместо того, чтобы создавать несколько переменных, я думал, что можно каким-то образом сохранить их на массиве. Как и 2D-массивы, книги и 1-й массив являются полкой.

==================

2D-массивы имеют номера внутри них.

После выполнения предложения AndersonVieira все мои 2D-массивы хранятся в ArrayList. Это потрясающе.

Все, что я хочу сделать, это поиск определенного числа во всех этих 2D-массивах внутри ArrayList. Но я не знаю, какой код писать для этого. Я все еще новичок в Java.

+0

Как бы вы хотели добавить его в массив 1D? Каким будет данный 2D-массив, и он ожидал 1D-массив? –

+1

Считаете ли вы использование 3d-массива? Или «Карта»? –

+0

Я обновил свой пост. В основном метод делает 2D-массив. Но единственный способ сохранить каждый 2D-массив - это сделать несколько переменных. Я думал, если можно каким-то образом организовать это. – ColdMoney21

ответ

2

Вы можете создать List<int[][]> и хранить кэши там:

List<int[][]> caches = new ArrayList<>(); 
for (int i = 0; i < numCaches; i++) { 
    caches.add(createCacheArray(cacheSize, blockSize, memory, (cacheSize * i))); 
} 

Тогда вы могли бы получить доступ к кэши, выполнив:

int[][] cache = caches.get(j); 

Где j - это индекс нужного элемента в caches список.

Или, если вам нужно сделать что-то для каждого сохраненного кэша, можно перебирать в списке:

for (int[][] cache : caches) { 
    doSomething(cache); 
} 

Это, вероятно, будет легче работать, чем с использованием 3D-массива.

Edit:

Чтобы проверить, является ли 2-мерный массив содержит элемент, вам нужно перебрать все позиции, сравнивающих значение позиции до требуемого значения:

static boolean contains(int element, int[][] cache) { 
    for (int i = 0; i < cache.length; i++) { 
     for (j = 0; j < cache[i].length; j++) { 
      if (cache[i][j] == element) { 
       return true; 
      } 
     } 
    } 
    return false; 
} 

Тогда вам может создать метод, который возвращает первый кеш, который содержит указанный элемент, или null в противном случае:

static int[][] cacheContaining(int element, List<int[][]> caches) { 
    for (int[][] cache : caches) { 
     if (contains(element, cache)) { 
      return cache; 
     } 
    } 
    return null; 
} 
+0

Есть ли способ сделать это без добавления «cache1», «cache2» и т. Д.? Я хотел бы сделать это в цикле for. – ColdMoney21

+1

'for (int i = 0; i

+0

Этот метод является идеальным, еще один вопрос. После создания списка есть число, которое мне нужно найти из всех этих созданных списков 2D-массивов. Как бы я сделал это сейчас, когда 2D-массивы были организованы в arraylist? – ColdMoney21

1

Вы можете использовать 3D массив, как,

int[][][] cache = { 
    createCacheArray(cacheSize, blockSize, memory, (cacheSize * 0)), 
    createCacheArray(cacheSize, blockSize, memory, (cacheSize * 1)), 
    createCacheArray(cacheSize, blockSize, memory, (cacheSize * 2)), 
    createCacheArray(cacheSize, blockSize, memory, (cacheSize * 3)) 
}; 
System.out.println(Arrays.deepToString(cache); 
Смежные вопросы