Tag: 比较

在Java中实现SIFT

所以我正在研究一个简单的Java应用程序,它允许用户将图像作为查询输入,并让应用程序将其与图像数据库进行比较(基本上只是不同图像的目录)。 我基本上正在研究几种图像相似度测量技术,以找出哪些适合比较汽车图片。 我一直在做一些阅读,除了FFT / SSIM,我读过SIFT算法可以产生非常好的结果。 但是,作为一个只有一年左右的基本Java经验的人,老实说我不确定我是否是一个足够好的程序员才能实现它。 天啊,由于它的明显复杂性,我仍然无法理解算法的核心概念。 所以我想问那些经验比我多的人。 首先为此目的实施SIFT是否实用? 我可以单独使用JDK(没有其他插件,如果可能的话)吗? 我该怎么做呢? 提前致谢

Float.NaN == Float.NaN

为什么这种比较会让我“假”? 我查看了源代码并将Float.NaN定义为 /** * A constant holding a Not-a-Number (NaN) value of type * float. It is equivalent to the value returned by * Float.intBitsToFloat(0x7fc00000). */ public static final float NaN = 0.0f / 0.0f; 编辑:令人惊讶的是,如果我这样做: System.out.println(“FC ” + (Float.compare(Float.NaN, Float.NaN))); 它给了我0 。 所以Float.compare()确实认为NaN等于它自己!

如何在Java中比较两个数字?

可能重复: 比较两个通用数字的值 我想比较两个任意的Number实例来找出哪个更大。 如您所知,这些可能是整数,长整数或双数,但也可能是BigIntegers或BigDecimals。 那么该怎么办? Number没有实现Comparable 。 不能使用doubleValue()因为BigDecimals或BigIntegers可能会丢失精度。 我是否真的必须进行实例测试和投射? 必须有一些库可以做到这一点。 但我已经检查过Apache Commons和Guava没有运气。 编辑1:评论指出了这一点: 比较两个通用数字的值 。 它有一个解决方案,使用toString()将所有内容转换为BigDecimal。 真的没有更好的办法吗? 编辑2:我刚刚发布了自己的版本作为另一个问题的答案 。 它应该比公认的答案更有效和更强大。

我们应该总是超越平等吗?

在编写自己的类时,是否总是需要重写equals(Object o) ? 如果我不这样做,它会自动检查所有字段是否相同? 或者只是检查两个变量是否指向同一个对象?

如何根据值来比较两个地图

如何按价值比较两张地图? 我有两个包含相等值的地图,并希望通过它们的值进行比较。 这是一个例子: Map a = new HashMap(); a.put(“foo”, “bar”+”bar”); a.put(“zoo”, “bar”+”bar”); Map b = new HashMap(); b.put(new String(“foo”), “bar”+”bar”); b.put(new String(“zoo”), “bar”+”bar”); System.out.println(“equals: ” + a.equals(b)); // obviously false …. what to call to obtain a true? [[ 编辑:有人请编辑并修复此问题,以表示其实际意味着什么。 上面的代码打印“true”,而不是“false”。 ]] 显然,要实现比较并不困难,只需比较所有键及其相关值即可。 我不相信我是第一个这样做的人,因此必须在java或jakarta.commons库中已经有一个库函数。 谢谢

Java大文件磁盘IO性能

我的硬盘上有两个(每个2GB)文件,想要将它们相互比较: 使用Windows资源管理器复制原始文件大约需要。 2-4分钟(即读写 – 在同一物理和逻辑磁盘上)。 使用java.io.FileInputStream读取两次并在每个字节的字节上比较字节数组需要20多分钟。 java.io.BufferedInputStream缓冲区为64kb,文件以块的forms读取然后进行比较。 比较完成是一个紧凑的循环之类 int numRead = Math.min(numRead[0], numRead[1]); for (int k = 0; k < numRead; k++) { if (buffer[1][k] != buffer[0][k]) { return buffer[0][k] – buffer[1][k]; } } 我该怎么做才能加快速度呢? NIO应该比普通的流更快吗? Java无法使用DMA / SATA技术,而是执行一些缓慢的OS-API调用吗? 编辑: 谢谢你的回答。 我做了一些基于它们的实验。 正如安德烈亚斯所示 流或nio方法没有太大差别。 更重要的是正确的缓冲区大小。 我的实validation实了这一点。 由于文件是以大块读取的,所以即使是额外的缓冲区( BufferedInputStream )也不会提供任何内容。 优化比较是可能的,并且我通过32次展开获得了最佳结果,但与磁盘读取相比,花费的时间比较小,因此加速很小。 看起来我无能为力;-(

Java,检查String是否是回文。 不区分大小写

我想编写一个java方法,如果字符串是回文,则返回true。 这是我到目前为止: String palindrome = “…”; boolean isPalindrome = palindrome.equals( new StringBuilder(palindrome).reverse().toString()); 我的问题在于它没有考虑这样一个词: Race car是一个回文。 Doc, note, I dissent. A fast never prevents a fatness. I diet on cod. 测试这是否是回文的最佳方法是什么,不区分大小写并忽略标点符号。

比较Java中的整数数组。 为什么不= =工作?

我正在学习Java并且刚刚提出了关于该语言的这个微妙的事实:如果我声明两个具有相同元素的整数数组并使用==进行比较,则结果为false 。 为什么会这样? 比较评估不应该是true吗? public class Why { public static void main(String[] args) { int[] a = {1, 2, 3}; int[] b = {1, 2, 3}; System.out.println(a == b); } } 提前致谢!

如何在java中比较两个日期和时间

我有两个具有以下格式的Date对象。 SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss”); String matchDateTime = sdf.parse(“2014-01-16T10:25:00”); Date matchDateTime = null; try { matchDateTime = sdf.parse(newMatchDateTimeString); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } // get the current date Date currenthDateTime = null; DateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd’T’HH:mm:ss”); Date dt = new Date(); String currentDateTimeString = dateFormat.format(dt); Log.v(“CCCCCurrent […]

演示与Java的字符串比较

我想用Java中的几行代码来演示,比较两个字符串( String ),你必须使用equals()而不是operator == 。 这是我尝试过的东西: public static void main(String Args[]) { String s1 = “Hello”; String s2 = “Hello”; if (s1 == s2) System.out.println(“same strings”); else System.out.println(“different strings”); } 我期待这个输出: different strings ,因为测试s1 == s2我实际上是在比较两个引用(即地址)而不是objet的内容。 但实际上我得到了这个输出: same strings ! 浏览互联网我发现一些Java实现将优化上面的代码,以便s1和s2实际上将引用相同的字符串。 那么,在比较Java中的字符串(或对象)时,如何使用==运算符来演示问题?