Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 选择最佳数据结构_Java_Data Structures - Fatal编程技术网

Java 选择最佳数据结构

Java 选择最佳数据结构,java,data-structures,Java,Data Structures,表示此数据的最佳数据结构是什么。名称应该能够轻松地进行迭代 编辑 名称是唯一的。 我们需要做的就是这样的事情。 我对使用Hashmap有疑问,这就是我问的原因。 代码是一个字符串 Name - Code (String) A - 123 B - 123 C - 23 D - 123 E - 23 F - 23 G - 66 H - 66 如果名称是唯一的,则哈希映射将是适当的 您可以使用keys()迭代键 要迭代条目,可以迭代entrySet(

表示此数据的最佳数据结构是什么。名称应该能够轻松地进行迭代

编辑

名称是唯一的。 我们需要做的就是这样的事情。 我对使用Hashmap有疑问,这就是我问的原因。 代码是一个字符串

Name - Code (String)
A    - 123
B    - 123 
C    - 23
D    - 123
E    - 23
F    - 23
G    - 66
H    - 66

如果名称是唯一的,则哈希映射将是适当的

您可以使用
keys()
迭代键

要迭代条目,可以迭代
entrySet()
。 参见

如果需要执行反向查找,可以使用Guava提供的。(一个非常好的图书馆)

地图条目示例:

for( loop dataStructure names (lets say n)){ 
   if(NAME.equals(n){
     String code = dataStructure.get(n);
     do somthing 
   }
}
公共最终类映射示例{
公共静态void main(字符串[]args){
Map Map=newhashmap();
地图放置(“A”、“123”);
对于(Map.Entry mapEntry:Map.entrySet()){
if(mapEntry.getKey().equals(“A”)){
最后一个字符串代码=mapEntry.getValue();
System.out.println(“您想要的代码:“+code”);
}
}
}
}
但由于名称似乎是一个常量,您可以简单地执行
String code=map.get(NAME)

听起来像一个常量。特别是,如果名称的顺序很重要,可以使用

您可以使用
put
方法填充它,然后迭代条目(或仅迭代键,或仅迭代值):


我认为你正在考虑:

String name = ...;
String code = map.get(name);
if (code != null) {
    // do something...
}

我建议使用HashMap

  • HashMap类使用哈希表实现映射接口。 这允许基本操作的执行时间,例如get() 和put(),即使对于大型集合也保持不变

  • HashMap对于基于键和 基于键插入和删除值。a的条目 HashMap没有排序

  • import java.util.HashMap;
    导入java.util.Set;
    公共类MyHashMapRead{
    公共静态void main(字符串a[]{
    HashMap hm=新的HashMap();
    //将键值对添加到hashmap
    hm.put(“A”、“1”);
    hm.put(“B”、“2”);
    hm.put(“C”、“3”);
    系统输出打印项次(hm);
    设置键=hm.keySet();
    用于(字符串键:键){
    System.out.println(“+key+的值为:”+hm.get(key));
    }
    }
    
    }
    名称是否唯一?取决于您希望如何处理数据。是否要从名称到代码进行查找?是否要从代码到可能的名称列表进行查找?您想迭代名称/代码对吗?请明确说明您想对数据做什么。如果有人对此投反对票,请说明原因。所以每个人都可以学习如何发布一个更好的问题。我也想知道。有时候我觉得这样的问题有点刺耳。也许你可以通过添加为什么你担心地图不是一个好的解决方案来改进你的问题。但除此之外,如果OP希望有效地迭代名称/代码对(例如),则IDK.Not。那么,
    列表
    可能更合适。@aioo迭代
    哈希映射
    会有什么问题?但我同意如果可以进行反向查找,那么,他最好使用番石榴BiMap或类似的东西。为什么根据OP所说的内容,
    TreeMap
    HashMap
    更有好处呢?名字的顺序不是important@AsiriLiyanaArachchi所以一个
    HashMap
    就可以了-看我的编辑。唯一的缺陷是它不是动态的,实际的数据结构可能更适合。
    // Fill the map:
    Map<String, String> map = new TreeMap<>();
    map.put("A", "123");
    map.put("B", "123");
    // etc...
    
    // Iterate over it:
    for (Map.Entry<String, String> entry : map.entrySet()) {
        System.out.pritnln ("Key: " + entry.getKey() + " value: " + entry.getValue());
    }
    
    String name = ...;
    String code = map.get(name);
    if (code != null) {
        // do something...
    }
    
    public enum Code {
        A("123"),
        B("123"), 
        C("23"),
        D("123"),
        E("23"),
        F("23"),
        G("66"),
        H("66");
    
        final public String value;
    
        Code(String value) {
            this.value = value;
        }
    }
    
    String h = Code.H.value;
    
    for (Code code : Code.values()) {
        System.out.printf("Name %s, code %s%n", code, code.value);
    }