小编Joo*_*kka的帖子

Google Guava vs. Apache Commons

我一直在寻找Java中的双向映射实现,并偶然发现了这两个库:

两者都是免费的,具有我正在寻找的双向地图实现(Apache中的BidiMap,Google中的BiMap),几乎相同的大小(Apache 493 kB,Google 499 kB)[编辑:不再是真的!]并且似乎在各方面都和我很相似.

我应该选择哪一个,为什么?是否有其他等效替代方案(必须是免费的并至少具有双向映射)?我正在使用最新的Java SE,所以不需要人为地限制Java 5或类似的东西.

java collections apache-commons guava

209
推荐指数
3
解决办法
6万
查看次数

fork/join框架如何比线程池更好?

使用新的fork/join框架而不仅仅是在开始时将大任务分成N个子任务,将它们发送到缓存的线程池(来自Executors)并等待每个任务完成,有什么好处?我没有看到使用fork/join抽象如何简化问题或使解决方案从我们多年来的工作中提高效率.

例如,教程示例中的并行化模糊算法可以像这样实现:

public class Blur implements Runnable {
    private int[] mSource;
    private int mStart;
    private int mLength;
    private int[] mDestination;

    private int mBlurWidth = 15; // Processing window size, should be odd.

    public ForkBlur(int[] src, int start, int length, int[] dst) {
        mSource = src;
        mStart = start;
        mLength = length;
        mDestination = dst;
    }

    public void run() {
        computeDirectly();
    }

    protected void computeDirectly() {
        // As in the example, omitted for brevity
    } …
Run Code Online (Sandbox Code Playgroud)

java fork-join

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

如何从Java中的String表示中获取Locale?

是否有一种巧妙的方法从Locale 方法返回的"程序化名称" 中获取Locale实例toString()?一个明显而丑陋的解决方案是解析String然后根据它构建一个新的Locale实例,但也许有更好的方法/就绪解决方案呢?

需要的是我想在SQL数据库中存储一些特定于语言环境的设置,包括Locales本身,但是将序列化的Locale对象放在那里会很难看.我宁愿存储他们的字符串表示,这似乎相当充分.

java locale

99
推荐指数
8
解决办法
12万
查看次数

为什么Java的AbstractList的removeRange()方法受到保护?

有没有人有任何想法,为什么AbstractList(以及在ArrayList中)中的removeRange方法是protected?它看起来像一个非常明确和有用的操作,但是,使用它,我们仍然被迫继承List实现.

有一些隐藏的理由吗?对我来说似乎很莫名.

java collections list protected arraylist

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

为什么位数总是(?)是2的幂?

我们有8位,16位,32位和64位硬件架构和操作系统.但不是说42位或69位.

为什么?它是否能使2 ^ n位成为更好的选择,或仅仅是与现有系统的兼容性?(64位寄存器可以容纳两个32位指针,或者一个32位数据单元可以容纳4个字节,这显然很方便.)

architecture theory hardware bit

51
推荐指数
6
解决办法
5608
查看次数

如何从Executors正确捕获RuntimeExceptions?

假设我有以下代码:

ExecutorService executor = Executors.newSingleThreadExecutor();
executor.execute(myRunnable);
Run Code Online (Sandbox Code Playgroud)

现在,如果myRunnable抛出一个RuntimeExcpetion,我怎么能抓住它?一种方法是提供我自己的ThreadFactory实现,newSingleThreadExecutor()uncaughtExceptionHandler为其中的Threads 设置自定义.另一种方法是换myRunnableRunnable包含try-catch -block 的本地(匿名).也许还有其他类似的解决方法.但是......不知怎的,这感觉很脏,我觉得不应该这么复杂.有清洁的解决方案吗?

java concurrency executor runtimeexception

43
推荐指数
4
解决办法
2万
查看次数

如何用Java声明数组元素volatile?

有没有办法volatile在Java中声明数组元素?即

volatile int[] a = new int[10];
Run Code Online (Sandbox Code Playgroud)

声明数组引用 volatile,但数组元素(例如a[1])仍然不是volatile.所以我正在寻找类似的东西

volatile int[] a = new volatile int[10];
Run Code Online (Sandbox Code Playgroud)

但它不会那样工作.有可能吗?

java arrays concurrency volatile

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

优雅地将队列长度指示符实现到ExecutorServices

为什么,为什么不java.util.concurrent提供其ExecutorServices 的队列长度指标?最近我发现自己做了这样的事情:

ExecutorService queue = Executors.newSingleThreadExecutor();
AtomicInteger queueLength = new AtomicInteger();
...

public void addTaskToQueue(Runnable runnable) {
    if (queueLength.get() < MAX_QUEUE_LENGTH) {
        queueLength.incrementAndGet(); // Increment queue when submitting task.
        queue.submit(new Runnable() {
            public void run() {
                runnable.run();
                queueLength.decrementAndGet(); // Decrement queue when task done.
            }
        });
    } else {
        // Trigger error: too long queue
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个工作正常,但......我认为这应该作为一部分实现ExecutorService.这是一个愚蠢的错误,容易携带一个与实际队列分开的计数器,计数器应该指示它的长度(让我想起C数组).但是,ExecutorServices是通过静态工厂方法获得的,因此无法简单地扩展优秀的单线程执行器并添加队列计数器.所以我该怎么做:

  1. 重新发明已经在JDK中实现的东西?
  2. 其他聪明的解决方案?

java queue concurrency executorservice executor

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

如何使用JNI访问对象中的数组?

JNI教程,例如教程,很好地介绍了如何访问对象中的原始字段,以及如何访问作为显式函数参数提供的数组(即作为子类jarray).但是如何访问作为字段的字段的Java(原始)数组jobject?例如,我想操作以下Java对象的字节数组:

class JavaClass {
  ...
  int i;
  byte[] a;
}
Run Code Online (Sandbox Code Playgroud)

主程序可能是这样的:

class Test {

  public static void main(String[] args) {
    JavaClass jc = new JavaClass();
    jc.a = new byte[100];
    ...
    process(jc);
  }

  public static native void process(JavaClass jc);
}
Run Code Online (Sandbox Code Playgroud)

相应的C++方面将是:

JNIEXPORT void JNICALL Java_Test_process(JNIEnv * env, jclass c, jobject jc) {

  jclass jcClass = env->GetObjectClass(jc);
  jfieldID iId = env->GetFieldID(jcClass, "i", "I");

  // This way we can get and set the "i" field. …
Run Code Online (Sandbox Code Playgroud)

java-native-interface

32
推荐指数
2
解决办法
4万
查看次数

实时Java图形/图表库?

Java图形或图表库上有一个早期的线程,其中发现JFreeChart非常好,但是,如其FAQ中所述,它不适用于实时渲染.

任何人都可以推荐一个支持实时渲染的类似库吗?只是一些基本的xy渲染 - 例如,从数据采集系统获取电压信号并在其到来时绘制它(x轴上的时间,y轴上的电压).

java charts graph real-time

29
推荐指数
6
解决办法
4万
查看次数