我有两个属性Name&电话号码。我的要求是,用户可以根据任何属性进行搜索,结果应该是姓名&电话号码。
案例1。如果用户根据姓名进行搜索,则应获取姓名和电话号码。
案例2。如果用户根据电话号码进行搜索,则应获取姓名和电话号码..
请告诉我,哪种收藏最适合这种情况。
答案 0 :(得分:3)
双向地图,是一种保留其值及其键值的唯一性的映射。这允许反向视图将每个bimap的值映射到其关联的键。 Guava具有多种实现类型,例如HashBiMap,ImmutableBiMap,EnumBiMap和EnumHashBiMap。
您可以查看link。
答案 1 :(得分:0)
java.util.List接口扩展了Collection接口。 List接口声明了用于管理对象(序列)的有序集合的方法。你可以:
特别是如果您正在动态调整对象集合的大小,请使用List over Java数组。 List提供的一些其他方法包括:
get(int index) - 返回指定位置的元素
remove(int index) - 删除指定位置的元素
set(int index,E element) - 替换指定的元素 位置
subList(int fromIndex,int toIndex) - 作为List返回可修改的 查看列表的指定部分(即更改为 视图实际影响基础列表)
类实现列表: Java提供了几个实现List接口的类。 最常用的有两种:
如果在创建列表后值仍保持相当静态,则ArrayList通常是List的最佳选择。它比随机访问的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。这种方法的好处是,如果您愿意,可以在多个键下存储相同的值。