LinkedHashMap或java中的两个独立数组

时间:2014-07-21 22:56:11

标签: java linkedhashmap

我有两个预定义长度的数组,让我们说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()

复杂性和效率明智这是一种更好的方法吗?

2 个答案:

答案 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 {

    }
 }

在创建类时,请注意这些选择。

干杯!