小编ysh*_*vit的帖子

Java 7是否使用Tim Sort for Method Arrays.Sort?

我找不到Java 7的文档,我只能找到关于Java 6的文档,它仍然可以快速或合并.有谁知道如何Arrays.sort在Java 7中找到该方法的文档?

java arrays sorting timsort

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

私有内部类的默认构造函数是否具有形式参数?

警告#1:这实际上是一个潜在的两个部分:首先,私有内部类的构造函数是否具有形式参数?如果是的话,为什么JLS说不呢?如果不是,怎么/为什么不呢?

警告#2:这个问题不适合猜测.我只是在寻找权威的答案.

默认构造函数在JLS 8.8.9中定义,它声明(部分):

默认构造函数没有形式参数,除非在非私有内部成员类中,默认构造函数隐式声明一个形式参数,表示该类的直接封闭实例(§8.8.1,§15.9.2,§15.9.3) ).

(重点补充)

"非私有"位对我来说似乎很奇怪:为了让内部类访问其封闭类中定义的字段,它需要对该实例的引用.无论内部类是否为私有,这都应该是相同的.

事实上,javac似乎与我一致,与规范相矛盾.如果我编译这个:

public class Ctors {
  private class MyInner {
  }
}
Run Code Online (Sandbox Code Playgroud)

...然后运行javap -c -private,然后我们看到一个带有单个形式参数的构造函数,用于封闭类的实例:

$ javap -c -private Ctors\$MyInner
Compiled from "Ctors.java"
class Ctors$MyInner {
  final Ctors this$0;

  private Ctors$MyInner(Ctors);
    Code:
       0: aload_0
       1: aload_1
       2: putfield      #1        // Field this$0:LCtors;
       5: aload_0
       6: invokespecial #2        // Method java/lang/Object."<init>":()V
       9: return
}
Run Code Online (Sandbox Code Playgroud)

作为参考,这是在Oracle JDK 1.8.0_05上.

所以JLS说私有内部成员类的默认构造函数没有正式参数,但javac/javap说它有一个.(我对最自然的工作方式的理解也会说它应该有一个,对于那些值得的东西.)哪个是正确的,为什么JLS明确排除私人内部类?

java language-design

21
推荐指数
1
解决办法
1034
查看次数

为什么我不能将Collection <GenericFoo>转换为Collection <GenericFoo <?>>

问题的关键是,为什么这会导致编译时错误?

List<Collection> raws = new ArrayList<Collection>();
List<Collection<?>> c = raws; // error
Run Code Online (Sandbox Code Playgroud)

背景

我理解为什么泛型一般不协变.如果我们能够分配List<Integer>List<Number>,我们会暴露自己ClassCastExceptions异常:

List<Integer> ints = new ArrayList<Integer>();
List<Number> nums = ints; // compile-time error
nums.add(Double.valueOf(1.2));
Integer i = ints.get(0); // ClassCastException
Run Code Online (Sandbox Code Playgroud)

我们在第2行得到一个编译时错误,以避免我们从第4行的运行时错误.这是有道理的.

List<C>List<C<?>>

但是这个怎么样:

List<Collection> rawLists = new ArrayList<Collection>();
List<Collection<?>> wildLists = rawLists; // compile-time error

// scenario 1: add to raw and get from wild
rawLists.add(new ArrayList<Integer>());
Collection<?> c1 = wildLists.get(0);
Object o1 = c1.iterator().next();

// scenario 2: add to wild …
Run Code Online (Sandbox Code Playgroud)

java generics

17
推荐指数
1
解决办法
168
查看次数

AtomicInteger地图

我想实现一个共享对象来计算操作执行的统计信息.对象状态将由Map<String,AtomicInteger>(键是操作名称,值是操作执行的次数)表示.我是否正确我可以选择一个HashMap<String,AtomicInteger>实现并且不使用它来从中获取值,因为AtomicInteger value下面有一个volatile 字段.

执行统计数据添加和增加的代码示例:

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;

public final class Stats {

private final Map<String, AtomicInteger> statistics = new HashMap<String, AtomicInteger>();

public int increment(String operationName) {
    if (!statistics.containsKey(operationName)) {
        synchronized (statistics) {
            if (!statistics.containsKey(operationName)) 
                statistics.put(operationName, new AtomicInteger(0));
        }
    }

    return statistics.get(operationName).getAndIncrement();
}

public int getOpStats(String operationName) {
    if (!statistics.containsKey(operationName)) {
        return 0;
    }
    return statistics.get(operationName).get();
}

}
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronization

7
推荐指数
1
解决办法
2797
查看次数

Java泛型命名约定

根据Java文档:

最常用的类型参数名称是:

E - Element(Java Collections Framework广泛使用)

K - 钥匙

N - 数字

T型

V - 价值

S,U,V等 - 第2,第3,第4类型

但是,我看过这样的代码

public <R> Observable<R> compose(Transformer<? super T, ? extends R> transformer) {
        return ((Transformer<T, R>) transformer).call(this);
    }
Run Code Online (Sandbox Code Playgroud)

这里是使用R,从哪个来源我可以找到R在这里的含义?

java generics

7
推荐指数
1
解决办法
362
查看次数

在Java 8中识别stacktrace中的lambdas

我试图使用JProfiler配置使用lambdas的Java应用程序.我无法识别,探查器将哪个lambda显示为热点:

探查器截图

我很感激任何帮助理解涉及lambdas的堆栈跟踪的格式,如"edu.indiana.soci.spidal.vectorclass.lambda $ PairwiseThread_SecDrv $ 23"

谢谢!

java lambda jprofiler java-8

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

Java的线性代数库

我有一组线性方程组,具有无限数量的解决方案(一个解决方案集),但我似乎找不到任何可以产生该解决方案集的Java库(他们都抱怨矩阵是“奇异”的)产生无限组的解决方案?)。

我可能无法理解某些内容,但是我研究了一些库(例如JAMAla4j),但不明白为什么它们无法为我提供解决方案。

BR托马斯A

编辑:我尝试使用“求解器”在线求解方程组,它为我生成了求解集,所以我知道这是可能的。

java linear-algebra

5
推荐指数
0
解决办法
869
查看次数

在省略类名的同时在本地调用泛型静态方法

这是我要调用/调用的方法.

public static <N,E> void doGenericStatic2(N number, E element) {
    System.out.println(number);
    System.out.println(element);
}
Run Code Online (Sandbox Code Playgroud)

这是我测试调用前一个方法的方法(两者都位于同一个类中MyClass)

    public static void testInvokeGenericMethodLocally() {
        doGenericStatic2(100, "Text");
//      <Integer,String>doGenericStatic2(100, "Text"); //Syntax error, insert "super ( ) ;" to complete Statement
        MyClass.doGenericStatic2(100, "Text");
        MyClass.<Integer,String>doGenericStatic2(100, "Text");
    }
Run Code Online (Sandbox Code Playgroud)

为什么这种特殊情况(第二次调用测试)会<Integer,String>doGenericStatic2(100, "Text");产生编译时错误?

java generics

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

Java WeakHashMap类

我想测试Java WeakHashMap类功能,为此我编写了以下测试:

public class WeakHashMapTest {

public static void main(String args[]) {
    Map<String, Object> weakMap = new WeakHashMap<>();
    String x = new String("x");     
    String x1 = new String("x1");   
    String x2 = new String("x2");   
    weakMap.put(x, x);
    weakMap.put(x1, x1);
    weakMap.put(x2, x2);
    System.out.println("Map size :" + weakMap.size());
    // force all keys be eligible
    x=x1=x2=null;
    // call garbage collector 
    System.gc();
    try {
        Thread.sleep(1000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    System.out.println("Map size :" + weakMap.size());
    System.out.println("Map :" + weakMap);
}

}    
Run Code Online (Sandbox Code Playgroud)

运行WeakMapTest类后,我得到以下输出令人不快惊讶:

gc前的地图:{x = …

java garbage-collection weak-references weakhashmap

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

在完成所有线程之前从java方法返回

是否可以在完成所有线程之前从启动线程的java方法返回?

这是我的代码:

import java.util.concurrent.*;

public class ExecutorSample {
    public static void main(String[] args) {
        ExecutorService service = Executors.newCachedThreadPool();
        for (int i = 0; i < 10; i++) {
            service.execute(() -> {
                while (true) {
                }
            });
        }
        return;
    }
}
Run Code Online (Sandbox Code Playgroud)

由于我不理解的某些原因,这不会返回.为什么主线程的返回受到工作线程卡住的影响?

java multithreading thread-safety threadpool

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