小编pol*_*nts的帖子

0.0到1.0之间有多少个双数?

这是我多年来一直想到的事情,但我从来没有花时间问过.

许多(伪)随机数生成器生成0.0到1.0之间的随机数.在数学上,此范围内有无限数,但是double是浮点数,因此具有有限的精度.

所以问题是:

  1. double在0.0和1.0之间有多少个数字?
  2. 是否有1到2之间的数字?100到101之间?在10 ^ 100和10 ^ 100 + 1之间?

注意:如果它有所不同,我double特别感兴趣的是Java的定义.

random floating-point precision double

92
推荐指数
3
解决办法
8726
查看次数

为什么System.arraycopy在Java中是原生的?

我很惊讶在Java源代码中看到System.arraycopy是一个本机方法.

当然原因是因为它更快.但是什么原生技巧是能够使用的代码使其更快?

为什么不循环遍历原始数组并将每个指针复制到新数组 - 当然这不是那么缓慢和麻烦?

java arrays native arraycopy

79
推荐指数
3
解决办法
2万
查看次数

为什么Java没有条件和条件或运算符的复合赋值版本?(&& =,|| =)

因此,对于在布尔二元运算符,Java有&,|,^,&&||.

让我们简要总结一下他们在这里简要介绍的内容:

对于&,结果值是true两个操作数值是否为true; 否则,结果是false.

对于|,结果值是false两个操作数值是否为false; 否则,结果是true.

对于^,结果值是true操作数值是否不同; 否则,结果是false.

&&操作是一样&,但是评估其右边的操作数只有在其左侧操作数的值true.

||操作是一样|的,但评估其右边的操作数只有在其左侧操作数的值false.

现在,所有5间,那些3有复合赋值版本,分别为|=,&=^=.所以我的问题是显而易见的:为什么不是Java提供&&=||=呢?我发现我需要那些比我更需要更多的&=|=.

而且我不认为"因为它太长"是一个很好的答案,因为Java有>>>=.这个遗漏必须有更好的理由.


15.26分配运营商 …

java conditional-operator short-circuiting assignment-operator compound-assignment

77
推荐指数
4
解决办法
1万
查看次数

如何在JavaScript Regexp中捕获任意数量的组?

我希望这行JavaScript:

"foo bar baz".match(/^(\s*\w+)+$/)
Run Code Online (Sandbox Code Playgroud)

返回类似的东西:

["foo bar baz", "foo", " bar", " baz"]
Run Code Online (Sandbox Code Playgroud)

但它只返回最后捕获的匹配:

["foo bar baz", " baz"]
Run Code Online (Sandbox Code Playgroud)

有没有办法获得所有捕获的匹配?

javascript regex repeat capturing-group

77
推荐指数
3
解决办法
4万
查看次数

为什么String的hashCode()没有缓存0?

我注意到在Java 6的String源代码中,hashCode只缓存0以外的值.下面的代码片段展示了性能上的差异:

public class Main{
   static void test(String s) {
      long start = System.currentTimeMillis();
      for (int i = 0; i < 10000000; i++) {
         s.hashCode();
      }
      System.out.format("Took %d ms.%n", System.currentTimeMillis() - start);
   }
   public static void main(String[] args) {
      String z = "Allocator redistricts; strict allocator redistricts strictly.";
      test(z);
      test(z.toUpperCase());
   }
}
Run Code Online (Sandbox Code Playgroud)

在ideone.com中运行此命令将提供以下输出:

Took 1470 ms.
Took 58 ms.
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:

  • 为什么String的hashCode()没有缓存0?
  • Java字符串哈希值为0的概率是多少?
  • 对于散列为0的字符串,每次重新计算哈希值的性能损失的最佳方法是什么?
  • 这是缓存值的最佳实践方式吗?(即缓存除一个以外的所有?)

为了您的娱乐,这里的每一行都是一个散列为0的字符串:

pollinating sandboxes
amusement & hemophilias
schoolworks = perversive
electrolysissweeteners.net
constitutionalunstableness.net
grinnerslaphappier.org
BLEACHINGFEMININELY.NET
WWW.BUMRACEGOERS.ORG
WWW.RACCOONPRUDENTIALS.NET …
Run Code Online (Sandbox Code Playgroud)

java string hashcode

75
推荐指数
6
解决办法
1万
查看次数

如果equals(null)抛出NullPointerException,这是一个坏主意吗?

合同equals与问候null,如下所示:

对于任何非空引用值x,x.equals(null)应该return false.

这是相当奇特的,因为如果o1 != nullo2 == null,那么我们有:

o1.equals(o2) // returns false
o2.equals(o1) // throws NullPointerException
Run Code Online (Sandbox Code Playgroud)

o2.equals(o1) throws NullPointerException是一件好事,因为它提醒我们程序员错误.然而,如果出于各种原因我们只是将其切换到了那个错误就不会被捕获o1.equals(o2),而这只会"默默地失败".

所以问题是:

  • 为什么o1.equals(o2)不应该return false投掷而不是一个好主意NullPointerException
  • 如果我们尽可能地重写合同以便anyObject.equals(null)总是扔掉,那会NullPointerException不是一个坏主意?

与...比较 Comparable

相反,这就是Comparable合同所说的:

请注意,这null不是任何类的实例,并且e.compareTo(null)应该抛出一个NullPointerException偶数e.equals(null)返回false.

如果NullPointerException适合compareTo,为什么不适合equals

相关问题


一个纯粹的语义论证

这些是Object.equals(Object …

java null equals nullpointerexception

75
推荐指数
3
解决办法
5万
查看次数

明确地与布尔常量进行比较是不好的,例如在Java中是否(b == false)?

写不好

if (b == false) //...

while (b != true) //...
Run Code Online (Sandbox Code Playgroud)

是不是总是更好,而不是写:

if (!b) //...

while (!b) //...
Run Code Online (Sandbox Code Playgroud)

据推测,性能没有差异(或者存在?),但是如何衡量两者之间的显性,简洁性,清晰度,可读性等?

更新

为了限制主观性,我还要感谢来自权威编码风格指南的任何引用,这些引用始终是优选的,或者在何时使用.


注意:变量名称b仅用作示例,ala foobar.

java boolean coding-style

72
推荐指数
7
解决办法
2万
查看次数

使用Java管理高度重复的代码和文档

高度重复的代码通常是一件坏事,并且有一些设计模式可以帮助减少这种情况.然而,由于语言本身的限制,有时它是不可避免的.以下示例来自java.util.Arrays:

/**
 * Assigns the specified long value to each element of the specified
 * range of the specified array of longs.  The range to be filled
 * extends from index <tt>fromIndex</tt>, inclusive, to index
 * <tt>toIndex</tt>, exclusive.  (If <tt>fromIndex==toIndex</tt>, the
 * range to be filled is empty.)
 *
 * @param a the array to be filled
 * @param fromIndex the index of the first element (inclusive) to be
 *        filled with the specified value
 * @param toIndex …
Run Code Online (Sandbox Code Playgroud)

java maintenance preprocessor guava

70
推荐指数
3
解决办法
5003
查看次数

对几乎排序的数组进行排序(错误放置的元素不超过k)

我最近被问到这个面试问题:

您将获得一个几乎已排序的数组,因为每个N元素可能被错放的k位置不超过正确排序顺序的位置.找到一种节省空间和时间的算法来对数组进行排序.

我有一个O(N log k)解决方案如下.

让我们表示arr[0..n)从索引0(包括)到N(不包括)的数组元素.

  • 分类 arr[0..2k)
    • 现在我们知道arr[0..k)它们处于最终的排序位置......
    • ......但arr[k..2k)可能仍然被错放了k!
  • 分类 arr[k..3k)
    • 现在我们知道arr[k..2k)它们处于最终的排序位置......
    • ......但arr[2k..3k)可能仍然被错放了k
  • 分类 arr[2k..4k)
  • ....
  • 直到你排序arr[ik..N),然后你就完成了!
    • 如果2k剩下的元素少于其他元素,那么最后一步可能比其他步骤便宜

在每个步骤中,您对大多数2k元素进行排序,在每个步骤O(k log k)结束时将至少k元素放在最终排序位置.有O(N/k)步骤,所以整体复杂性O(N log k).

我的问题是:

  • O(N log k)最佳的?这可以改进吗?
  • 你可以在没有(部分)重新排序相同元素的情况下做到这一点吗?

arrays sorting algorithm

65
推荐指数
5
解决办法
3万
查看次数

使用正则表达式的Scala捕获组

假设我有这段代码:

val string = "one493two483three"
val pattern = """two(\d+)three""".r
pattern.findAllIn(string).foreach(println)
Run Code Online (Sandbox Code Playgroud)

我希望findAllIn只返回483,但相反,它返回了two483three.我知道我可以使用unapply只提取那部分,但我必须有一个整个字符串的模式,如:

 val pattern = """one.*two(\d+)three""".r
 val pattern(aMatch) = string
 println(aMatch) // prints 483
Run Code Online (Sandbox Code Playgroud)

有没有另一种方法来实现这一点,而不使用java.util直接的类,而不使用unapply?

regex string scala capturing-group

63
推荐指数
5
解决办法
5万
查看次数