Java 有没有简单的方法将有序列表转换为查找表?

Java 有没有简单的方法将有序列表转换为查找表?,java,lookup-tables,Java,Lookup Tables,如果我使用Arrays.asList()创建一个列表,该列表将保证按插入顺序分配。我想用它作为一种方式,轻松定义类顶部比较器的排序顺序: List<String> sortedKeyOrder = Arrays.asList("x", "y", "z"); List-sortedKeyOrder=Arrays.asList(“x”、“y”、“z”); 有没有一种简单的方法可以将此列表的插入顺序转换为比较器的固定时间查找表?您可以创建一个静态方法,返回一个比较器,该比较器由如下映射

如果我使用
Arrays.asList()
创建一个列表,该列表将保证按插入顺序分配。我想用它作为一种方式,轻松定义类顶部比较器的排序顺序:

List<String> sortedKeyOrder = Arrays.asList("x", "y", "z");
List-sortedKeyOrder=Arrays.asList(“x”、“y”、“z”);

有没有一种简单的方法可以将此列表的插入顺序转换为比较器的固定时间查找表?

您可以创建一个静态方法,返回一个比较器,该比较器由如下映射支持:

公共静态比较器lookupComparator(Iterable顺序){
int指数=0;
final Map orderMap=新HashMap();
for(T:order){
put(t,index++);
}
返回新的比较器(){
@凌驾
公共整数比较(tO1,tO2){
对象。requirennull(o1);
对象。要求为空(o2);
如果(o1==o2){
返回0;
}
返回orderMap.get(o1.compareTo(orderMap.get(o2));
}
};
}
@试验
public void testLookupComparator(){
比较器lc=查找比较器(Arrays.asList(“c”、“a”、“b”、“z”、“m”、“g”));
列出一些值=数组;
someValues.sort(lc);
System.out.println(someValues);
}

这将打印
[c、a、b、z、m、g]
。但是,如果其中一个值为
null
,或者不在映射中,它将引发异常。

您的意思是类似
indexOf()
但具有O(1)时间复杂性?我真的不明白您想要做什么。可能会添加一些伪代码。创建一个
映射。用一个简单的for循环遍历列表,然后执行
map.put(list.get(i),i)
。就这样。然后,您可以使用
map.get()
获取元素的索引。请尝试
TreeSet
。这是正确的,向上投票。不过,使用
HashMap
就足够了。您不需要
LinkedHashMap