我有两个属性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
- 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。这种方法的一个很好的副作用是,如果您愿意,可以将相同的值存储在多个键下。