栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaHashMap在同一键下具有多个值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaHashMap在同一键下具有多个值

你可以:

  1. 使用具有列表作为值的地图。
    Map<KeyType, List<ValueType>>。
  2. 创建一个新的包装器类,并将该包装器的实例放置在地图中。
    Map<KeyType, WrapperType>
  3. 使用类似类的元组(节省创建许多包装器)。
    Map<KeyType, Tuple<Value1Type, Value2Type>>
  4. 并排使用多个地图。
    例子
    1.使用列表作为值进行映射

// create our mapMap<String, List<Person>> peopleByForename = new HashMap<>();    // populate itList<Person> people = new ArrayList<>();people.add(new Person("Bob Smith"));people.add(new Person("Bob Jones"));peopleByForename.put("Bob", people);// read from itList<Person> bobs = peopleByForename["Bob"];Person bob1 = bobs[0];Person bob2 = bobs[1];

这种方法的缺点是列表未完全绑定到两个值。

2.使用包装器类

// define our wrapperclass Wrapper {    public Wrapper(Person person1, Person person2) {       this.person1 = person1;       this.person2 = person2;    }    public Person getPerson1 { return this.person1; }    public Person getPerson2 { return this.person2; }    private Person person1;    private Person person2;}// create our mapMap<String, Wrapper> peopleByForename = new HashMap<>();// populate itWrapper people = new Wrapper();peopleByForename.put("Bob", new Wrapper(new Person("Bob Smith"),       new Person("Bob Jones"));// read from itWrapper bobs = peopleByForename.get("Bob");Person bob1 = bobs.getPerson1;Person bob2 = bobs.getPerson2;

这种方法的缺点是,你必须为所有这些非常简单的容器类编写很多样板代码。

3.使用元组

// you'll have to write or download a Tuple class in Java, (.NET ships with one)// create our mapMap<String, Tuple2<Person, Person> peopleByForename = new HashMap<>();// populate itpeopleByForename.put("Bob", new Tuple2(new Person("Bob Smith",      new Person("Bob Jones"));// read from itTuple<Person, Person> bobs = peopleByForename["Bob"];Person bob1 = bobs.Item1;Person bob2 = bobs.Item2;

我认为这是最好的解决方案。

4.多个地图

// create our mapsMap<String, Person> firstPersonByForename = new HashMap<>();Map<String, Person> secondPersonByForename = new HashMap<>();// populate themfirstPersonByForename.put("Bob", new Person("Bob Smith"));secondPersonByForename.put("Bob", new Person("Bob Jones"));// read from themPerson bob1 = firstPersonByForename["Bob"];Person bob2 = secondPersonByForename["Bob"];

此解决方案的缺点是,两个映射之间的关联并不明显,程序错误可能会导致两个映射不同步。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431879.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号