哪个集合最适合存储键值对,但我必须同时搜索键和值



我有两个属性Name &电话号码。我的要求是,用户可以根据任何属性搜索,结果应该是名称&电话号码。

1。如果用户根据姓名搜索,它应该得到姓名和电话号码。

2。如果用户根据电话号码搜索,它应该得到姓名和电话号码。

请告诉我,哪个集合最适合这个场景

您可以使用BiMap。这是Guava项目的一部分。

一个双向映射,是一种保持其值和键的唯一性的映射。这允许一个反向视图,将这个映射的每个值映射到它的关联键。Guava有多种实现类型,如HashBiMap、ImmutableBiMap、enumimap和EnumHashBiMap。

你可以看看链接

java.util.List接口扩展了Collection接口。List接口声明了用于管理有序对象集合(序列)的方法。您可以:

  • 控件,每个元素插入列表
  • 按整数索引(在列表中的位置)访问元素
  • 查找列表中的元素
  • 在大多数列表中插入重复元素和空值实现

特别是在动态调整对象集合大小的情况下,最好使用List而不是Java数组。List提供的一些附加方法包括:

  • add(int index, E element) -在指定位置插入一个元素(如果没有索引参数,新元素将被追加到末尾)
  • get(int index) -返回指定位置的元素

    remove(int index) -删除指定位置的元素

  • set(int index, E element) -替换指定位置的元素位置

  • subList(int fromIndex, int toIndex) -返回一个可修改的列表列表指定部分的视图(即,更改为

类实现列表:Java提供了几个实现List接口的类。最常用的两种:

  • java.util.ArrayList
如果在创建List之后,List的值保持相当静态,那么ArrayList通常是List的最佳选择。对于随机访问,它比LinkedList更有效。
  • java.util.LinkedList

如果你经常插入和删除元素,特别是从集合的中间,LinkedList提供比ArrayList更好的性能。但是对于随机访问,它比ArrayList要慢。在下面的例子中,注意java.util.Collections.sort()静态方法的使用,它对List中的元素进行就地排序:包实效;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
/**
 * This program reads arguments passed to it from the command-line
 * or the lines from STDIN, sorts them, and writes the result to STDOUT.
 */
public class Sort {
    public static void main(String[] args) throws IOException {
        if (args.length > 0) {
            Arrays.sort(args);
            for (int i = 0; i < args.length; i++) {
                System.out.println(args[i]);
            }
        } else {
            List lines = new ArrayList();
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                    System.in));
            String line = null;
            while ((line = reader.readLine()) != null) {
                lines.add(line);
            }
            Collections.sort(lines);
            for (Iterator i = lines.iterator(); i.hasNext();) {
                System.out.println(i.next());
            }
        }
    }
}

您可以使用Apache Commons中的BidiMap。

但是这些映射将阻止一对多的关系。不清楚是否需要这样做(例如,办公室电话、座机电话等)

还有,整个映射是否适合内存?您必须在两次运行之间将其存储在磁盘上吗?

如果是这样,我建议使用MapDB支持的地图。这可以给出一个序列化的BidiMap。这种方法的一个很好的副作用是,如果您愿意,可以将相同的值存储在多个键下。

最新更新