我尝试做的是将一个数值赋给一组邮政编码,然后在稍后的程序中使用该数值进行计算。我现在所拥有的是
if (zip == 93726 || zip == 93725 || zip == 92144) {
return 100;
}
else if (zip == 94550 || zip == 34599 || zip == 77375) {
return 150;
}然后我把这个变量用在计算中。将数字赋值给变量和计算都可以,但我遇到的显然是android只允许你有这么多行代码,并且我已经用光了使用if else语句的行数。我的问题是,这样做会更好吗?
我并不是想给每个zip指定一个城市,因为我已经看到他们在其他海报上提供了这样的服务。
发布于 2015-11-25 17:02:00
a.您可以使用
switch (zip)
{
case 93726: case 93725: case 92144: return 100;
case 94550: case 34599: case 77375: return 150;
}-
或者创建一个HashMap<Integer,Integer>,并用“zip to value”条目填充它,如果你有那么多的案例,这应该会给你带来更好的性能。
Map<Integer,Integer> m = new HashMap<>();
m.put(93726,100);稍后,您可以调用
return m.get(zip);-
c.如果你的zip数是数万,你想在内存中工作,那么你应该考虑只保存10万个整数大小的数组:
int[] arr=new int[100000];并用数据填充它:
arr[93726]=100;
.
.
.发布于 2015-11-25 17:40:42
,您可能应该对您的邮政编码使用字符串常量
- in some places, some start with 0
- in some places, they may contain letters as well as numbers
Object ( String或Integer)作为常量,我经常使用Collection.contains(zip)作为每个if语句中条件的惰性快捷方式。该集合包含该条件的所有常量,您可能会使用一个专门用于查找的子类,可能是HashSet。请记住,如果您按照其他地方的建议使用HashMap解决方案,您的键也将是Integer对象,因此您将在任何情况下对键进行散列,只需要将结果值存储在收集建议中即可。我怀疑对于一个大型常量集合,散列可能会比在if语句中遍历大量==条件直到找到正确的条件要快得多。(如果最常用的常量出现在前面,并且在第一个if常量中出现,这可能会有所帮助
在一个完全不同的注释中(即策略而不是代码),您应该看看是否可以对您的ZIPs进行分组。我的意思是,例如,如果您知道"923xx“和"924xx”形式的所有(或大多数)压缩都会导致250的返回,那么您可能会大大缩短条件语句的使用时间。例如,用于String ZIPs的zip.startsWith("923") || zip.startsWith("923")或用于int的(zip / 100) == 923 || (zip / 100) == 924。
组的少量更具体的异常仍然可以处理,您只需要在更一般的条件之前拥有更具体的条件。
发布于 2015-11-25 17:02:57
使用声明性数据。尤其是邮政编码可能会被更新、扩展、更正:
例如,使用zip.properties
points = 100, 150
zip100 = 93726, 93725, 92144
zip150 = 94550, 34599, 77375,\
88123, 12324, 23424和
Map<Integer, Integer> zipToPoints = new HashMap<>();如果你得到的邮政编码带有前导零,也许最好使用字符串,或者小心地用基数10来解析它们(前导零是基数8,八进制)。
我不知道是否真的存在这样的限制,但一点编码的额外努力值得拥有所有的数据。
https://stackoverflow.com/questions/33912102
复制相似问题