如何在整数范围列表中高效搜索-java
如何在整数范围列表内高效搜索? 我有一些重复值的范围列表。如果输入的数字在范围内,我想得到值 e、 g 射程起点 靶场端 价值 10 75 A. 95 200 A. 300 455 B 570 650 C 201 250 A. 255 275 B 您可以使用的如何在整数范围列表中高效搜索-java,java,list,hashmap,range,Java,List,Hashmap,Range,如何在整数范围列表内高效搜索? 我有一些重复值的范围列表。如果输入的数字在范围内,我想得到值 e、 g 射程起点 靶场端 价值 10 75 A. 95 200 A. 300 455 B 570 650 C 201 250 A. 255 275 B 您可以使用的范围图: RangeMap<Integer, Character> rangeMap = TreeRangeMap.create(); rangeMap.put(Range.closed(10, 75), 'A'); range
范围图
:
RangeMap<Integer, Character> rangeMap = TreeRangeMap.create();
rangeMap.put(Range.closed(10, 75), 'A');
rangeMap.put(Range.closed(95, 200), 'A');
rangeMap.put(Range.closed(300, 455), 'B');
rangeMap.put(Range.closed(570, 650), 'C');
rangeMap.put(Range.closed(201, 250), 'A');
rangeMap.put(Range.closed(255, 275), 'B');
Character character = rangeMap.get(61);
Character character2 = rangeMap.get(244);
Character character3 = rangeMap.get(270);
System.out.println(character);
System.out.println(character2);
System.out.println(character3);
注意:由于某些原因,它被标记为@Beta
,因此我想确定它是否适合生产使用。您可以使用的RangeMap
:
RangeMap<Integer, Character> rangeMap = TreeRangeMap.create();
rangeMap.put(Range.closed(10, 75), 'A');
rangeMap.put(Range.closed(95, 200), 'A');
rangeMap.put(Range.closed(300, 455), 'B');
rangeMap.put(Range.closed(570, 650), 'C');
rangeMap.put(Range.closed(201, 250), 'A');
rangeMap.put(Range.closed(255, 275), 'B');
Character character = rangeMap.get(61);
Character character2 = rangeMap.get(244);
Character character3 = rangeMap.get(270);
System.out.println(character);
System.out.println(character2);
System.out.println(character3);
注意:出于某种原因,它标有
@Beta
,因此我想确定它是否适合生产使用。为什么不试试三条if-else语句
假设:范围的起始值和结束值被视为给定范围内的值。
“D”表示给定值不属于任何定义的范围值
示例代码:
public static char findRangeValue(int number){
if((number >= 10 && number <=75) ||(number >= 95 && number <=250) ){
return 'A';
}else if((number >= 255 && number <=275) ||(number >= 300 && number <=455) ){
return 'B';
}else if(number >= 570 && number <=650 ){
return 'C';
}
return 'D';
}
产出:
B
A
C
你为什么不试试三个if-else语句呢 假设:范围的起始值和结束值被视为给定范围内的值。 “D”表示给定值不属于任何定义的范围值 示例代码:
public static char findRangeValue(int number){
if((number >= 10 && number <=75) ||(number >= 95 && number <=250) ){
return 'A';
}else if((number >= 255 && number <=275) ||(number >= 300 && number <=455) ){
return 'B';
}else if(number >= 570 && number <=650 ){
return 'C';
}
return 'D';
}
产出:
B
A
C
您可以使用
TreeMap
和Entry
来完成它,就像使用常规Java一样。
如果提供的参数不存在范围,则返回notfound
这是包含范围的地图
- 这是一个树形图
- 键是范围的下半部分
- 该值是一个
,包含范围的上部和字符串AbstractMap.SimpleEntry
int[] testData = { 9, 23, 255, 99, 94, 201 };
for (int i : testData) {
System.out.printf("%4d -> %s%n",i, get.apply(i));
}
印刷品
9 -> Not Found
23 -> A
255 -> B
99 -> A
94 -> Not Found
201 -> A
您可以使用
TreeMap
和Entry
来完成它,就像使用常规Java一样。
如果提供的参数不存在范围,则返回notfound
这是包含范围的地图
- 这是一个树形图
- 键是范围的下半部分
- 该值是一个
,包含范围的上部和字符串AbstractMap.SimpleEntry
int[] testData = { 9, 23, 255, 99, 94, 201 };
for (int i : testData) {
System.out.printf("%4d -> %s%n",i, get.apply(i));
}
印刷品
9 -> Not Found
23 -> A
255 -> B
99 -> A
94 -> Not Found
201 -> A
看看这里使用的树结构。如果我读对了,即使只有六个
If
s检查一个数字是否在某个范围内也比使用地图更有效。也许不优雅,但肯定很有效。如果范围列表很小,我会使用if
。我的列表是以百为单位的。:(看看这里使用的树形结构。如果我读对了,即使只有六个If
s检查一个数字是否在某个范围内也比使用地图更有效。可能不优雅,但肯定有效。如果范围列表很小,我会使用If
。我的列表是以百为单位的。)(谢谢。我的实际范围列表是数百个。这可能不是我案例的优雅解决方案/谢谢。我的实际范围列表是数百个。这可能不是我案例的优雅解决方案/谢谢。感谢您的帮助。对于Java中相对简单的操作,我质疑使用第三方库只是为了获得此功能(当然,除非OP已经在使用Guava)。谢谢。感谢您的帮助。对于Java中相对简单的操作,我质疑使用第三方库只是为了获得此功能(当然,除非OP已经在使用Guava)。
9 -> Not Found
23 -> A
255 -> B
99 -> A
94 -> Not Found
201 -> A