2011-12-04 2 views
1

Я хотел бы конвертировать integer [] [] в Vector<Vector<Double>>. После долгих чтений кажется, что никто не оставил поисковый пост в Интернете для чего-то подобного. много int vector для двойного вектора, arraylist к вектору и т. д. К сожалению, я не нашел то, что искал. Итак ... Кто-нибудь из вас знает подходящий метод для этого? Я думал о преобразовании моих int[][] в строки, а затем конвертировал их в vector<vector<Double>>. Мнения? Было бы полезно что-то подобное, т.е. преобразование моего массива в массив объектовint [] [] convert --to -> Vector <Vector <Double>>

Object[] a1d = { "Hello World", new Date(), Calendar.getInstance(), }; 
// Arrays.asList(Object[]) --> List 
List l = Arrays.asList(a1d); 

// Vector contstructor takes Collection 
// List is a subclass of Collection 
Vector v; 
v = new Vector(l); 

// Or, more simply: 
v = new Vector(Arrays.asList(a1d)); 

В противном случае вы могли бы дать мне лучший пример, который может иметь меньше шагов? Еще раз спасибо.

ответ

1

Вектор - это старый класс, который не устарел, но больше не должен использоваться. Вместо этого используйте ArrayList.

Вы должны использовать интерфейс LIst, а не использовать конкретный класс Vector. Программа на интерфейсах, а не на реализациях.

Кроме того, повторение таких преобразований показывает отсутствие дизайна. Инкапсулируйте свои данные в используемые объекты, которые не нуждаются в конверсии каждый раз, когда вам нужна новая функциональность.

Если вам действительно нужно сделать, это: использование петель:

int[][] array = ...; 
List<List<Double>> outer = new Vector<List<Double>>(); 
for (int[] row : array) { 
    List<Double> inner = new Vector<Double>(); 
    for (int i : row) { 
     inner.add(Double.valueOf(i)); 
    } 
    outer.add(inner); 
} 

Преобразование из INT в строку, а затем из строки к Double расточительно.

+0

Вы могли бы улучшить ответ, отметив, что 'VECTOR', поскольку реализация интерфейса «List» предпочтительнее «ArrayList», только если нужна поточно-безопасная реализация. –

+0

Если мне нужен синхронизированный список, я предпочитаю использовать Collections.synchronizedList (list). И в большинстве случаев этого недостаточно, чтобы создать поточно-безопасную программу, потому что вам часто нужны операции сравнения и установки в любом случае, требующие явной синхронизации. –

+0

Я вижу все точки в отношении вектора, но причина, по которой я попросил преобразовать в вектор, - это то, что задание запрашивает его, лично я не вижу смысла в выполнении другого шага, так как у меня есть все необходимые функции. С другой стороны, вынужден использовать этот класс скелета для хранения моего окончательного массива int, заставил бы меня ознакомиться с структурами суперкласса и наследованием/полиморфизмом в java. спасибо за ответы –

2

Прежде всего: избегайте Vector, оно устарело; используйте вместо этого ArrayList (или что-то похожее). Read more here

Во-вторых, если бы я должен был преобразовать 2d массив в список списков, я бы держать его очень просто:

List<List<Double>> list = new ArrayList<ArrayList<Double>>(); 
for(int i=0; i<100; i++) //100 or whatever the size is.. 
{ 
     List<Double> tmp = new ArrayList<Double>(); 
     tmp = Arrays.asList(...); 
     list.add(tmp); 
} 

Я надеюсь, что я прямо понял вашу проблему.

0

A Вектор - один размер. Вы могли бы иметь вектор векторов для имитации 2D массива:

Vector v = new Vector(); 
    for (int i = 0; i < 100; i++) { 
     v.add(new Vector()); 
    } 

    //add something to a Vector 
    ((Vector) v.get(50)).add("Hello, world!"); 

    //get it again 
    String str = (String) ((Vector) v.get(50)).get(0); 

Примечание: Вектор старая коллекция, не рекомендуется использовать

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