2014-03-12 24 views
0

我想创建一个独特的2D数组列表。列数是固定的,行数应该是动态的。但是,对于第一列,我希望将类型设置为字符。其余的列应该是int类型。有没有办法做到这一点?我正在使用它进行算术压缩。独特的Java 2D Arraylist

这是我目前有

//encoding section 
    float low = 0; 
    float high = 1; 
    float range = high - low; 

    List<int[]> rowList = new ArrayList<int[]>(); 

    rowList.add(new int[] { 1, 2, 3 }); 
    rowList.add(new int[] { 4, 5, 6 }); 
    rowList.add(new int[] { 7, 8 }); 

    for (int[] row : rowList) 
    { 
     System.out.println("Row = " + Arrays.toString(row)); 
    } 

enter image description here

+0

您可以创建一个强制类型的包装类。 –

回答

1

这是你想要的...

List<Object[]> rowList = new ArrayList<Object[]>(); 

rowList.add(new Object[] { 'a', 5, 6 }); 
rowList.add(new Object[] { 'b', 5, 6 }); 
rowList.add(new Object[] { 7, 8 }); 

for (Object[] row : rowList) 
{ 
    System.out.println("Row = " + Arrays.toString(row)); 
} 

,输出是

Row = [a, 5, 6] 
Row = [b, 5, 6] 
Row = [7, 8] 
+0

我很抱歉误会。我希望第一列而不是行包含所有字符。 – statius

+0

请看我的修改,不要忘记竖起大拇指。 –

+0

它的完美!不知道我们可以这样做。会竖起大拇指! – statius

0

创建相应的类满足您的需求:

public class My2DArray { 
    private char[] firstColumn; 
    private int[][] otherColumns; 

    // + constructor, getters, setters 

    @Override 
    public String toString() { 
     StringBuilder sb = new StringBuilder(); 
     for(int row = 0 ; row < firstColumn.length ; ++row) { 
      sb.append(firstColumn[row]); 
      for(int col = 0 ; col < otherColumns[row].length ; ++col) { 
       sb.append(", ").append(otherColumns[row][col]); 
      } 
      sb.append(System.getProperty("line.separator")); 
     } 
     return sb.toString(); 
    } 
} 
+0

这不应该以相反的方式完成吗?创建一个包含一个字符和一个整数数组的“Row”类。在这里你给一个班级分配很多责任。 –

0

对象路线可能是您的最佳选择。特别是因为Arraylist/Arraylist没有为基元定义。你需要使用Integer类型。

即便如此,你需要2个数组列表,一个用于整数,另一个用于字符。

看到这个问题: Java Vector or ArrayList for Primitives了解更多。