我有两个预定义长度的数组,让我们说8,其中包含相关数据。我可以用array1 [0]在array2 [0]处进行相应映射的方式排列它们。也就是说,两个数组中的键值对都在同一个索引处。在这种情况下,为了迭代数组,我可以使用如下的for循环
for(int i=0;i<array1.length;i++){
int array1Val = array1[i];
String array2Val = array2[i];
//some code
}
这种做法是不是很好?或者更好的是使用链接的hashmap代替并使用
循环 map.entrySet()
复杂性和效率明智这是一种更好的方法吗?
答案 0 :(得分:3)
经验法则:当您考虑创建相应的数组时,是时候为相应的数据创建一个类,并创建该类的数组。这是将对应数据存储在Java对象中的最清晰,最易读,面向对象的方法。 (它不必被称为#34;数据&#34;。)
class Data {
private int value1;
private String value2;
// Any other arrays? Make another value here.
// Constructor, getters, setters
}
然后声明该类的数组,并在此处存储对象。
Data[] mydata = new Data[length];
for (int i = 0; i < length; i++) {
mydata[i] = new Data(); // and you can then initialize the Data object too.
}
然后一个for
循环可以访问每个Data
对象。
for (int i = 0; i < length; i++) {
Data data = mydata[i];
// Extract values here.
}
(或者您也可以使用增强型&#34; foreach&#34;循环。)
for (Data data : mydata) {
// Extract values here.
}
答案 1 :(得分:0)
使用地图。
就性能而言,您正在迭代数据结构的长度。
所以它只有o(n)
从地图读取是o(1),从数组中读取也是o(1)
所以表现真的没什么区别。
但就可读性和可维护性而言,最好只拥有一张地图&#34;数据结构然后需要以特殊方式消费/使用的两个数组数据结构&#34; (在这种情况下,你需要记住array1 [0]映射到array2 [0]。这使得代码的可读性和复杂性都比以前要低。
保持代码干净,易于阅读,简单,使用地图:
以下是在java中循环遍历地图的方法:
for (Map.Entry<String, Object> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
// ...
}
for (Object value : map.values()) {
// ...
}
[UPDATE]
回应那些建议&#34;他们创建一个Class&#34; ...
的人请问自己&#34;谁需要使用这些数据&#34;?
如果数据仅与内部方法相关,那么我建议使用像这里的匿名类:
public void myMethod(String param1, String param2) {
class MyAnonymousClass {
String data1;
String data2;
}
MyAnonymousClass anonymous = new MyAnonymousClass();
anonymous.data1 = param1;
anonymous.data2 = param2;
}
如果数据仅与另一个类的内部相关,则创建一个私有静态内部类。
pubic class SomeClass {
private static class MyDataContainer {
}
}
在创建类时,请注意这些选择。
干杯!