在 Java 的同一个数组中是否有 "right " 方法来存储一个字符串和一个整数?

Is there a "right "way to store a String and an Integer in the same array in Java?

我认为在 Java 中的同一个数组中存储一个字符串和一个整数在某些情况下会更有效率,但我知道 Java 是强类型的。

有没有办法做到这一点?如果没有,我该怎么办?

您可以使用 Object[] 来执行此操作。但请不要。如果你觉得你需要在一个数组中混合不同的类型,也许是时候重新考虑你的设计了(这里有一个想法:将 Strings 转换为 Integers 甚至 ints在存储它们之前)。 "right" 将如此不同的数据类型存储在同一个数组中根本就不行。

定义 "more efficient" 通常意味着更少的存储空间 space 或更少的处理器密集型。这些是截然相反的目标。挑战在于平衡它们。

您可以如前所述使用 Object[] 类型,但这需要确定类型,然后在使用前将每个元素转换为 StringInt

装箱,转换为Object类型,拆箱,转换为原始类型,是 Java.

中相对昂贵的操作

如果必须使用相同的数组索引存储,可能的解决方案:

  • 如果不需要对int项进行进一步的数学处理,使用.toString()方法将其转换为String并存储在 String 的数组中。

  • 如果Integer元素个数会比String少很多,用.toString()方法转成String存起来在 String 的数组中。然后使用 Integer.parseInt() 解析 ints。(parseInt() 被认为是一个缓慢的操作)

  • 如果内存不是问题,请创建两个大小相同的独立数组,一个类型为 String,另一个类型为 int。选择一个作为主要(人口最多)。使用标志值(String 为“”,intInteger.MIN_VALUE)指示结果是另一种类型,应该使用存储在另一个数组中的值。这以使用更多内存为代价保留了公共索引。

如果可能,我建议重写代码以使用两个单独的数组。

    package ArrayPractice;
    import java.util.ArrayList;
    import java.util.Scanner;
    public class Question8 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("Enter the array range: ");
            int i= sc.nextInt();
            int [] data= new int[i];
            ArrayList<Object> testing= new ArrayList<>();
            Object [] demo= new Object[i];

            for (int y = 0; y < data.length; y++) {
                System.out.println("Enter the Array number: " + y);
                demo[y]= sc.next();
            }

            for(Object o: demo){
                System.out.println(o);
            }

        }
    }