【问题标题】:Making a mixed 2D array in java在java中制作混合二维数组
【发布时间】:2013-06-22 04:55:20
【问题描述】:

我想要一个带有一行字符串和另一行带有 int 的二维矩阵。 那可能吗? 还是我必须将 int 保存为字符串,然后再将它们转换为 int?

【问题讨论】:

  • 这有点可能,但这通常是一个非常糟糕的主意。您可以创建一个 Object[][] 数组并向其中添加 String 和 Integers。但不要这样做。如果您需要连接 String 和 int,请创建一个执行此操作的类,然后创建此类型的对象的一维集合或数组。
  • 制作包装器或使用HashMap

标签: java arrays string matrix int


【解决方案1】:

不,这是不可能的。数组对象只能有一个数据类型。您可以创建一个具有intString 作为属性的类并使用它。永远不要使用Object[][],即使有这样做的诱惑,这是一种邪恶的解决方法,黑客失败的次数比成功的次数要多。如果Object 是一种合理的技术,那么他们就不会为 Collection 引入泛型!

【讨论】:

  • 但它可以是字符串和整数继承的类型。
  • Integers 继承,int 没有!
  • 一个Object[][] 数组,这就像在自己的脚下射击。如果我的答案是错误的,任何建议使用它的人都错了。
  • Integer 将在功能上等同于 int 用于此目的。所以 OP 可以使用 Integer 对象,但无论如何,这并不能使他最初的建议成为一个好主意。
【解决方案2】:

宁可使用对象。

class MyEntry { 
    String foo;
    int number;
}
MyEntry[] array = new MyEntry[10];

但如果必须,您可以使用两种类型 - 仅通过 Object 超类型。

Object[][] arr = new Object[2][10];

arr[0][0] = "Foo";
arr[1][0] = new Integer(50);

【讨论】:

    【解决方案3】:

    您可以创建 Objects 2D 数组并在其中放置字符串和整数,但我不确定在数组中混合类型是否是个好主意。您可能应该更多地描述您的问题,以便我们找出更好的方法。

    【讨论】:

      【解决方案4】:

      是的。如果您声明为对象矩阵,那么您可以存储字符串和整数(不是 int),困难在于正确检索它们:)

      【讨论】:

        【解决方案5】:

        如果你做一个Object 的二维数组,就像Object[][] myArray = new Object[x][y] 一样,其中 x 和 y 是数字,你可以做到这一点。

        您所要做的就是在使用对象之前将它们转换为它们的预期类型。比如(String) myArray[0][3]

        只有在您确定特定位置的对象将是什么类型时,您才应该这样做。

        但是,以这种方式做事通常不是一个好主意。更好的解决方案是定义您自己的数据结构类,该类具有 String 数组和 int 数组作为成员变量。如:

        public class myData {
            String[] theStringArray;
            int[] theIntArray;
        
            public myData(String[] sArraySize, int[] iArraySize) {
                this.theStringArray = new String[sArraySize];
                this.theIntArray = new int[iArraySize);
            }
        
            ...
            // Additional getters / setters etc... 
            ...
        }
        

        【讨论】:

        • 无意冒犯,但两个单独的数组更糟糕。
        • 可能你是对的。我的意图主要是说明定义自己的数据结构会更好。
        【解决方案6】:

        您可以创建一个 Object 类型的数组并在其中存储任何非原始 Object。 当您检索它们时,您需要确保检查它们的类。

        if(objArray[0] instanceof String) {
            // do string stuff
        } else if(objArray[0] instanceof Integer) {
            // do integer stuff
        }
        

        等等

        我认为您最好创建一个新类,该类可以存储您想要的类型的对象,然后使用 getter 和 setter 检索它们。它更安全、更稳定。

        【讨论】:

          猜你喜欢
          • 2015-07-12
          • 1970-01-01
          • 2015-06-21
          • 1970-01-01
          • 1970-01-01
          • 2018-09-04
          • 2019-04-20
          • 2011-08-02
          相关资源
          最近更新 更多