关于在Java中选择合适的数据结构的问题

时间:2017-05-06 16:00:16

标签: java arraylist data-structures hashmap

我的问题是有3个变量,比如a,b,c

首先,需要输入和存储信息a,b,c。

例如a = Tom,b =学校A,c = 1402

然后,我可以输入“Tom”来获取上述信息,在这种情况下,如果学校B中还有另一个Tom,那么该信息也会被打印出来。

或者输入“Tom,A学校”,然后才会打印出Tom。在这个问题中,如果a和b都被锁定,它们将不会重复。

嗯,我的观点是必须是一个键,而一个+ b可以是一个复合键。首先我想到了一个HashMap,但是,HashMap只有一个键到一个值。所以我打算使用2张地图,但这不能使用复合键。

我的想法是否正确?或者在这种情况下是否可以使用Java中更好的数据集合?

感谢您的时间!

2 个答案:

答案 0 :(得分:0)

Java中没有现成的数据结构供您根据需要使用。 Apache Commons和Google Guava Collections中有多值的地图实现,但核心Java中却没有。

但是,在我看来,您可以使用地图声明(例如Map<String, List<String>>Map<String, List<Student>>)来实现它,具体取决于您是将学生详细信息保留为连接字符串还是Student类。

在填充地图时 - 您将在地图中为第一行/学生创建两个条目,一个用于a,另一个条目用于a+b连接。

然后在为后续行创建条目时,首先应检查映射中是否存在键,如果存在,则获取值,追加新值并再次存储。

记录a=Tom, b=school A, c=1402将有两个条目,然后记录a=Tom, b=school B, c=1403,您将为密钥= Tom追加记录并为TomschoolB添加新条目,因此共有三个条目在地图中输入密钥 - TomTomschoolATomschoolB。键Tom将在值列表中包含两个项目,而其余两个将包含单个项目。

您的查找代码应遵循密钥计算逻辑作为密钥创建逻辑,即字符串连接或您希望的任何其他内容。

这只是粗略地了解可以通过列表处理多个值。

编辑:从您的评论中,您看起来很困惑,所以下面是实现这个想法的代码。您可以根据需要调整和扩展它。

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MultiValuedMap {


    private static Map<String,List<String>> storage = new HashMap<>();

    public static void main(String[] args) {

        store("Tom","Tom,schoolA,1402");
        store("TomschoolA","Tom,schoolA,1402");
        store("Tom","Tom,schoolB,1402");
        store("TomschoolB","Tom,schoolB,1403");

        storage.forEach((key,value) -> System.out.println("key:"+key+",value:"+value));

    }

    private static void store(String key, String value){

        if(storage.containsKey(key)) {
            List<String> newList = storage.get(key);
            newList.add(value);
            storage.put(key,newList);
        }else{
            List<String> values = new ArrayList<String>();
            values.add(value);
            storage.put(key,values);
        }

    }

}

<强>输出:

key:Tom,value:[Tom,schoolA,1402, Tom,schoolB,1402]
key:TomschoolB,value:[Tom,schoolB,1403]
key:TomschoolA,value:[Tom,schoolA,1402]

答案 1 :(得分:0)

如果您对使用任何现有数据结构感到不明确,我建议您创建自己的数据结构。您可以根据需要创建任何方法和任何内容。