小编Ada*_*ski的帖子

BigDecimal编码的最佳比例

我需要将a BigDecimal紧凑编码为a ByteBuffer来替换我当前的(垃圾)编码方案(将其写BigDecimal为UTF-8编码,String前缀为表示String长度的字节).

假设a BigDecimal实际上是一个整数值(在数学意义上)和相关的标度,我打算将标度写为单个字节,后跟VLQ编码的整数.这应该足以涵盖预期值的范围(即最大标度127).

我的问题:当遇到诸如10,000,000,000之类的大值时,将其编码为值为1显然是最佳的:1为10,而不是编码整数10,000,000,000,其标度为0(将占用更多字节).如何确定给定的最佳比例BigDecimal?...换句话说,我如何确定我设置的最小可能比例,BigDecimal而不必执行任何舍入?

请不要在答案中引用"过早优化"一词:-)

java math bit-manipulation bigdecimal

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

通过Path2D检测鼠标指针

我构造了一个Path2D代表由直线组成的未闭合形状:

在此输入图像描述

我想能够检测何时单击鼠标并且鼠标指针接近路径(在几个像素内).使用该contains方法不起作用,因为算法将未闭合的形状视为隐式闭合(即通过在起点和终点之间绘制一条直线).

有谁知道实现这个的另一种机制?

java shape java-2d path-2d

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

HashMap概要分析

是否有任何HashMap实现公开钩子方法来分析Map的性能(平均链长,最佳/最差/平均访问时间,#rehashes等).

关于~O(1)访问时间使用HashMap和"希望最好"似乎很常见,而不分析是否真的如此,但我想在运行时测量性能(至少在开发期间)所以任何挂钩到JMX或分析软件的东西都会很好.

另外,是否有人知道HashMap实现链是基于二叉树而不是链表?

提前致谢.

java algorithm data-structures

5
推荐指数
1
解决办法
1099
查看次数

列表中的高效查找

我有一种情况,我ArrayListTransactionEvent"s " 填充. TransactionEvent有一个属性"事务ID".在大多数情况下,每个新事件的事务ID都大于先前事件的ID - 但是,这不能保证; 即数据几乎分类的.

我的问题是:如何根据交易ID执行快速查询?我目前的想法是调用Collections.binarySearch(...),如果失败则执行线性搜索.但是,我注意到Javadoc声明binarySearch的结果是未定义的,因为数据是无序的,所以我可能不得不滚动自己的实现.

额外:

  • 我曾尝试使用索引 - >事务ID的映射,但这种方法存在缺陷,因为无论何时更新/删除列表元素,我都必须重建整个映射; 即任何收益都会被删除.
  • 这不是过早优化的情况:当包含大量行(100,000)时List,它是TableModel当前执行速度非常慢的基础.

任何帮助赞赏.

java algorithm data-structures

5
推荐指数
1
解决办法
2761
查看次数

按升序大小顺序的一组整数的k组合

编程挑战:给定一组整数[1,2,3,4,5]我想在Java按升序大小顺序生成所有可能的k组合; 例如

[1], [2], [3], [4], [5], [1, 2], [1, 3] ... [1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

生成一个生成所有组合然后对它们进行排序的递归解决方案相当容易,但我想有一种更有效的方法可以消除对额外排序的需求.

java algorithm

5
推荐指数
2
解决办法
6748
查看次数

测量应用程序/线程所花费的时间

我正在用Java编写模拟,其中对象在牛顿物理学下运作.物体可以施加力,并且所产生的速度使其在屏幕上移动.模拟的本质意味着对象根据动画循环的当前和上一次迭代之间的时间间隔以不连续的步骤移动; 例如

public void animationLoop() {
  long prev = System.currentTimeMillis();
  long now;

  while(true) {
    long now = System.currentTimeMillis();
    long deltaMillis = now - prev;
    prev = now;

    if (deltaMillis > 0) { // Some time has passed
      for (Mass m : masses) {
        m.updatePosition(deltaMillis);
      }

      // Do all repaints.
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果动画线程以某种方式延迟导致大量时间坍塌(经典案例在Windows下,单击并保持最小化/最大化防止重新绘制),则会出现问题,这会导致对象以惊人的速度移动.我的问题:有没有办法确定动画线程花费的时间而不是挂钟时间,或者有人可以建议一个解决方法来避免这个问题吗?

到目前为止,我唯一的想法是deltaMillis通过一些上限来构建.

java java-2d

5
推荐指数
1
解决办法
3208
查看次数

计算时间加权移动平均线

我有一个时间序列的股票价格,并希望在十分钟的窗口内计算移动平均线(见下图).由于价格滴答偶尔发生(即它们不是周期性的),因此计算时间加权移动平均线似乎是最公平的.

时间序列

在图中有四个价格变化:A,B,C和D,后三个发生在窗口内.请注意,因为B仅在窗口中出现一段时间(例如3分钟),所以A的值仍然有助于计算.

事实上,据我所知,计算应该完全基于A,B和C(不是 D)的值以及它们与下一个点之间的持续时间(或者在A的情况下:开始之间的持续时间)时间窗口和B).最初D不会有任何影响,因为它的时间加权将为零. 它是否正确?

假设这是正确的,我担心的是移动平均线将比非加权计算"滞后"更多(这将直接解释D的值),但是,非加权计算有其自身的缺点:

  • 尽管超出时间窗口,"A"对结果的影响与其他价格一样多.
  • 突如其来的快速价格嘀嗒声将严重偏向移动平均线(虽然这可能是可取的?)

任何人都可以提供关于哪种方法看起来最好的建议,或者是否有值得考虑的替代(或混合)方法?

algorithm time-series mean moving-average

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

对象vs字节[0]为锁

我之前评论过这个问题("为什么java.lang.Object不是抽象的?")说我听说使用byte[0]锁定比使用锁定更有效java.lang.Object.我确定我已经在某个地方读过这篇文章,但我不记得在哪里:有谁知道这是否真的如此?

我怀疑这是由于实例化byte[0]需要的字节码略少Object,尽管有人指出byte[0]需要额外的存储来存储长度字段,所以听起来这可能会否定任何好处.

java multithreading synchronization locking synchronized

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

拆分字符串 - 笛卡尔方式

给出以下字符串:

"foo bar-baz-zzz"

我想将它分成字符""和" - ",保留它们的值,但得到所有输入组合.

我想得到一个包含二维数组

{{"foo", "bar", "baz", "zzz"}
,{"foo bar", "baz", "zzz"}
,{"foo", "bar-baz", "zzz"}
,{"foo bar-baz", "zzz"}
,{"foo", "bar", "baz-zzz"}
,{"foo bar", "baz-zzz"}
,{"foo", "bar-baz-zzz"}
,{"foo bar-baz-zzz"}}
Run Code Online (Sandbox Code Playgroud)

Java中是否有任何内置方法以这种方式拆分字符串?也许在像Apache Commons这样的库中?或者我必须写一个for循环的墙?

java string algorithm split cartesian-product

3
推荐指数
1
解决办法
1045
查看次数

Java依赖关系管理

我们公司生产了许多Java/Scala库供我们的研究部门使用.研究人员通常会从Matlab环境中与这些库进行交互,维护类路径以适应各种库依赖关系.

这些库通常由不同的开发团队生成,因此依赖管理有点脆弱.此外,由于时间限制以及某些代码是专有的这一事实,我们无法建立一个公司范围的持续集成系统.

我的问题:是否有一种工具/机制用于打包Java库(或应用程序),使其库依赖关系与其他库隔离?(例如,通过使用专用的类加载器).我正在考虑与.war文件相同的行,其中部署单元是自包含的,因此依赖性/动态类加载都是隐藏的.

java matlab dependencies scala

2
推荐指数
1
解决办法
445
查看次数