Reputation: 6290
I have to create in Java a 2D matrix (consisting of double values) as well as a 1D vector. It should be possible to access individual rows and columns as well as individual elements. Moreover, it should be thread-safe (threads writing at the same time). Perhaps later I need some matrix operations too.
Which data structure is best for this? Just a 2D array or a TreeMap? Or is there any amazing external library?
Upvotes: 11
Views: 57463
Reputation: 192
If you need thread safe behavior, use
Vector<Vector<Double>> matrix = new Vector<Vector<Double>>();
If you don't need thread safe behavior, use
ArrayList<ArrayList<Double>> matrix = new ArrayList<ArrayList<Double>>();
Upvotes: 5
Reputation: 2225
You should use Vector for 2D array. It is threadsafe.
Vector<Vector<Double>> matrix= new Vector<Vector<Double>>();
for(int i=0;i<2;i++){
Vector<Double> r=new Vector<>();
for(int j=0;j<2;j++){
r.add(Math.random());
}
matrix.add(r);
}
for(int i=0;i<2;i++){
Vector<Double> r=matrix.get(i);
for(int j=0;j<2;j++){
System.out.print(r.get(j));
}
System.out.println();
}
If this is your matrix indexes
00 01
10 11
You can get specifix index value like this
Double r2c1=matrix.get(1).get(0); //2nd row 1st column
Have a look at Vector
Upvotes: 10
Reputation: 1498
I'll give you an example:
int rowLen = 10, colLen = 20;
Integer[][] matrix = new Integer[rowLen][colLen];
for(int i = 0; i < rowLen; i++)
for(int j = 0; j < colLen; j++)
matrix[i][j] = 2*(i + j); // only an example of how to access it. you can do here whatever you want.
Clear?
Upvotes: 13