Tag: 优化

哪个更好/更有效:检查错误值或捕获Java中的exception

哪个在Java中效率更高:检查错误值以防止exception或让exception发生并捕获它们? 以下是两个示例代码块,用于说明这种差异: void doSomething(type value1) { ResultType result = genericError; if (value1 == badvalue || value1 == badvalue2 || …) { result = specificError; } else { DoSomeActionThatFailsIfValue1IsBad(value1); // … result = success; } callback(result); } 与 void doSomething(type value1) { ResultType result = genericError; try { DoSomeActionThatFailsIfValue1IsBad(value1); // … result = success; } catch […]

用于排列数字列表的Java代码

我编写了一个程序来查找给定项目列表的所有可能的排列。 这恰恰意味着我的程序打印r = 0到n的所有可能的P(n,r)值 以下是代码: package com.algorithm; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Set; public class Permutations { public static void main(String args[]) { Permutations obj = new Permutations(); Collection input = new ArrayList(); input.add(1); input.add(2); input.add(3); Collection<List> output = obj.permute(input); int k = 0; Set<List> pnr = null; for […]

更快速地计算两点之间的地理距离

我从互联网上的某个地方借用了以下方法(不记得在哪里)。 但它正在做一个直接的过程,找到两个GPS点之间的距离。 它运行得很好,除了它可能有点慢,因为我在数百万点运行它。 我想知道是否有人知道一种计算上更便宜的方法。 准确度需要在“正确”的一般区域,但不需要100%准确。 private double distFrom(double lat1, double lng1, double lat2, double lng2) { double earthRadius = 3958.75; double dLat = Math.toRadians(lat2-lat1); double dLng = Math.toRadians(lng2-lng1); double a = Math.sin(dLat/2) * Math.sin(dLat/2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(dLng/2) * Math.sin(dLng/2); double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); return earthRadius * c; } } […]

如何减少Scala(/ Java)启动开销?

我对Java世界一无所知(我主要做的是C / Python)但是Scala看起来很有趣,可以吸引我。我遇到的一个问题是巨大的启动开销 – 最小0.3秒,如果我更多m使用解释器而不是编译,相比之下,Python或C实际上是0。所以即使语言比Python快几十倍,如果我试图将它用于简单的任务,它仍然会相当慢实践。 有没有办法减少这个时间,或者它是JVM中不可避免的一部分+ Scala程序所需(隐式)导入的数量?

生成具有可变比例“1”位的随机二进制数

我需要一个函数来生成随机整数。 (现在假设Java long类型,但稍后会扩展到BigInteger或BitSet 。) 棘手的部分是有一个参数P,它指定结果中任何位的(独立)概率为1。 如果P = 0.5,那么我们可以使用标准随机数发生器。 P的一些其他值也易于实现。 这是一个不完整的例子: Random random = new Random(); // … long nextLong(float p) { if (p == 0.0f) return 0L; else if (p == 1.0f) return -1L; else if (p == 0.5f) return random.nextLong(); else if (p == 0.25f) return nextLong(0.5f) & nextLong(0.5f); else if (p == 0.75f) […]

结果总数错误?

我正在研究一个取整数的程序,并找到整数具有的连续和的组合数: 数字13可以表示为连续正整数6 + 7的总和。十四可以表示为2 + 3 + 4 + 5,也是连续正整数的总和。 有些数字可以表示为多个连续正整数的总和。 例如,25是12 + 13并且也是3 + 4 + 5 + 6 + 7。 我研究并读到它是奇数因子减去1的数量。 所以我写了一个程序来查找奇数因子的数量,在某些情况下我的答案仍然是错误的。 任何见解? 代码似乎工作正常但由于Timeout导致崩溃可能是由于优化错误。 可能的输入大小的约束是1到10 ^(12) 以下代码复制自alfasin的答案如下: import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; static long consecutive(long num) { while (num % 2 == 0) num /= 2; return consecutiveHelper(num); […]

用于优化循环语句的JVM选项

我在学校被告知,修改for loop的索引变量是一种不好的做法: 示例: for(int i = 0 ; i < limit ; i++){ if(something){ i+=2; //bad } if(something){ limit+=2; //bad } } 争论的焦点是, 某些编译器优化可以优化循环,而不是重新计算索引并在每个循环中绑定。 我已经在java进行了一些测试,似乎默认索引和绑定每次都会重新计算。 我想知道是否可以在JVM HotSpot激活这种function? 例如,要优化这种循环: for(int i = 0 ; i < foo.getLength() ; i++){ } 无需写: int length = foo.getLength() for(int i = 0 ; i < length ; i++){ } […]

编译器会优化它吗?

说我在C代码中有这样的东西。 我知道你可以使用#define来使编译器不能编译它,但只是出于好奇,我问的是编译器是否也会想出这个问题。 我认为这对Java编译器来说更为重要,因为它不支持#define 。 const int CONDITION = 0; …….. // Will the compiler compile this? if ( CONDITION ) { } …….

Hashmap与arrays性能

当Array的索引已知时,使用Arrays或HashMaps更好(性能方面)吗? 请记住,示例中的’objects array / map’只是一个示例,在我的实际项目中它由另一个类生成,所以我不能使用单个变量。 ArrayExample: SomeObject[] objects = new SomeObject[2]; objects[0] = new SomeObject(“Obj1”); objects[1] = new SomeObject(“Obj2”); void doSomethingToObject(String Identifier){ SomeObject object; if(Identifier.equals(“Obj1”)){ object=objects[0]; }else if(){ object=objects[1]; } //do stuff } HashMapExample: HashMap objects = HashMap(); objects.put(“Obj1”,new SomeObject()); objects.put(“Obj2”,new SomeObject()); void doSomethingToObject(String Identifier){ SomeObject object = (SomeObject) objects.get(Identifier); //do stuff } HashMap看起来要好得多,但我真的需要这方面的表现才能优先考虑。 编辑:井阵,那么,建议仍然欢迎 […]

编译器优化:Java字节码

我目前正在编写一个针对Java字节码的玩具编译器。 我想知道在编写.class文件之前是否存在可以在发出的字节码中进行的各种简单窥孔优化的某种目录,可能是摘要。 我实际上知道一些具有此function的库,但我想自己实现它。