在 Java 的同一个数组中是否有 "right " 方法来存储一个字符串和一个整数?
Is there a "right "way to store a String and an Integer in the same array in Java?
我认为在 Java 中的同一个数组中存储一个字符串和一个整数在某些情况下会更有效率,但我知道 Java 是强类型的。
有没有办法做到这一点?如果没有,我该怎么办?
您可以使用 Object[]
来执行此操作。但请不要。如果你觉得你需要在一个数组中混合不同的类型,也许是时候重新考虑你的设计了(这里有一个想法:将 String
s 转换为 Integer
s 甚至 int
s在存储它们之前)。 "right" 将如此不同的数据类型存储在同一个数组中根本就不行。
定义 "more efficient" 通常意味着更少的存储空间 space 或更少的处理器密集型。这些是截然相反的目标。挑战在于平衡它们。
您可以如前所述使用 Object[]
类型,但这需要确定类型,然后在使用前将每个元素转换为 String
或 Int
。
装箱,转换为Object
类型,拆箱,转换为原始类型,是
Java.
中相对昂贵的操作
如果必须使用相同的数组索引存储,可能的解决方案:
如果不需要对int
项进行进一步的数学处理,使用.toString()
方法将其转换为String
并存储在 String
的数组中。
如果Integer元素个数会比String
少很多,用.toString()
方法转成String
存起来在 String
的数组中。然后使用 Integer.parseInt()
解析 int
s。(parseInt()
被认为是一个缓慢的操作)
如果内存不是问题,请创建两个大小相同的独立数组,一个类型为 String
,另一个类型为 int
。选择一个作为主要(人口最多)。使用标志值(String
为“”,int
为Integer.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);
}
}
}
我认为在 Java 中的同一个数组中存储一个字符串和一个整数在某些情况下会更有效率,但我知道 Java 是强类型的。
有没有办法做到这一点?如果没有,我该怎么办?
您可以使用 Object[]
来执行此操作。但请不要。如果你觉得你需要在一个数组中混合不同的类型,也许是时候重新考虑你的设计了(这里有一个想法:将 String
s 转换为 Integer
s 甚至 int
s在存储它们之前)。 "right" 将如此不同的数据类型存储在同一个数组中根本就不行。
定义 "more efficient" 通常意味着更少的存储空间 space 或更少的处理器密集型。这些是截然相反的目标。挑战在于平衡它们。
您可以如前所述使用 Object[]
类型,但这需要确定类型,然后在使用前将每个元素转换为 String
或 Int
。
装箱,转换为Object
类型,拆箱,转换为原始类型,是
Java.
如果必须使用相同的数组索引存储,可能的解决方案:
如果不需要对
int
项进行进一步的数学处理,使用.toString()
方法将其转换为String
并存储在String
的数组中。如果Integer元素个数会比
String
少很多,用.toString()
方法转成String
存起来在String
的数组中。然后使用Integer.parseInt()
解析int
s。(parseInt()
被认为是一个缓慢的操作)如果内存不是问题,请创建两个大小相同的独立数组,一个类型为
String
,另一个类型为int
。选择一个作为主要(人口最多)。使用标志值(String
为“”,int
为Integer.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);
}
}
}