哪个集合最好存储键值对,但我必须执行搜索键和键;价值

时间:2015-05-31 15:22:43

标签: java search collections

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

案例1。如果用户根据姓名进行搜索,则应获取姓名和电话号码。

案例2。如果用户根据电话号码进行搜索,则应获取姓名和电话号码..

请告诉我,哪种收藏最适合这种情况。

3 个答案:

答案 0 :(得分:3)

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

双向地图,是一种保留其值及其键值的唯一性的映射。这允许反向视图将每个bimap的值映射到其关联的键。 Guava具有多种实现类型,例如HashBiMap,ImmutableBiMap,EnumBiMap和EnumHashBiMap。

您可以查看link

答案 1 :(得分:0)

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

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

特别是如果您正在动态调整对象集合的大小,请使用List over Java数组。 List提供的一些其他方法包括:

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

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

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

  • subList(int fromIndex,int toIndex) - 作为List返回可修改的 查看列表的指定部分(即更改为 视图实际影响基础列表)

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

  • 的java.util.ArrayList

如果在创建列表后值仍保持相当静态,则ArrayList通常是List的最佳选择。它比随机访问的LinkedList更有效。

  • java.util.LinkedList中

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

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());
            }
        }
    }
}

答案 2 :(得分:0)

您可以使用Apache Commons的BidiMap

但这些地图会阻止一对多的关系。目前尚不清楚是否需要(例如办公室线路,固定电话等)

此外,整个地图是否适合内存?你必须在运行之间将它存储在磁盘上吗?

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