2015-10-19 5 views
1

Мне нужен контейнер для 2-х разных матриц.Какая структура данных используется для хранения пар матриц?

Что-то вроде этого:

import org.opencv.core.Core; 
import org.opencv.core.Mat; 


List<Mat, Mat> listOfMats = new ArrayList<Mat, Mat>(); 

Очевидно, я не могу использовать ArrayList из числа параметров.

Дополнительная информация: Параметр обоих параметров равен. Каждая пара матриц зависит от каждого другого. Какая структура данных вы бы использовали здесь, если бы вы хотели оставаться эффективным. Если мне нужно будет принять решение между дисковым пространством и временем выполнения. Я бы предпочел первый.

Заранее спасибо

+0

Ваше описание не является достаточным. Что вы имеете в виду «Параметр обоих параметров равен». Что делает «Каждая пара матриц зависит от друг друга». влиять на strcuture? – AlexWien

+0

Является ли это 2-мерным массивом n-мерной матрицы? Мат кажется плотным массивом. И вы хотите создать пару из них? плотный или не плотный. это главный вопрос. Это зависит от данных. Невозможно ответить, если не указано knwoledge о распределении внешнего массива 2d. – AlexWien

+0

2 Матрицы всегда принадлежат друг другу. Это означает, что вам необязательно нужен Список в качестве значения. Да, это 2-мерный массив n-мерных матриц. И я не уверен, что вы подразумеваете под плотным здесь. –

ответ

1

В Java нет элемента пары. так написать один себя:

public class MatrixPair { 
    public Mat mat1; 
    public Mat mat2; 
    public MatrixPair(mat1, mat2) { 
    this.mat1 = mat1; 
    this.mat2 = mat2; 
    } 
} 

Теперь хранить в одном массиве или ArrayList:

List<MatPairs> matPairs = new ArrayList<MatPair>(); 
+0

Это потрясающе! Большое спасибо! –

1

Двумерные массивы (списки), как правило, кодируется следующим образом.

List<Mat, List<Mat>> listOfMat = new ArrayList<Mat, List<Mat>>(); 

Если вы очень часто имеют дело, что внутренний список имеет только одну запись, вы можете хранить Циновку непосредственно, но вы должны проверить каждый раз, когда какой тип объект является:

List<Mat, Object> listOfMat = new ArrayList<Mat, Object>(); 

В одном случае Object является списком в другом случае, это просто Mat. Вы можете проверить с помощью

if (obj instanceof Mat) { 
     // it i sdirectly a Mat 
    } else { 
     // it is an List<Mat> 
    } 
+0

Даже если внутренний список содержит только одну запись? –

+0

Я обновлюсь для одного enry: – AlexWien

+0

У вас всегда есть случай, если в внутреннем списке имеется только одна запись. Вот почему они являются парами –

Смежные вопросы