小编Ole*_*hov的帖子

如何在Java中创建一个新的List

我们创建一个Set:

Set myset = new HashSet()
Run Code Online (Sandbox Code Playgroud)

我们如何List在Java中创建?

java collections list

710
推荐指数
22
解决办法
183万
查看次数

我(i == i + 1){}永远循环的价值是什么?

我从英国大学考试的高级编程课程中跨过了这个益智游戏.

考虑以下循环,到目前为止,我是未声明的:

while (i == i + 1) {}
Run Code Online (Sandbox Code Playgroud)

找到i在此循环之前的定义,以便while循环永远持续.

下一个问题,为此代码片段提出了同样的问题:

while (i != i) {}
Run Code Online (Sandbox Code Playgroud)

对我来说很明显.当然,在另一种情况下,NaN我确实陷入了前一个问题.这与溢出有关吗?什么会导致这样的循环在Java中永远循环?

java types loops

118
推荐指数
2
解决办法
9639
查看次数

在Java中打印HashMap

我有一个HashMap:

private HashMap<TypeKey, TypeValue> example = new HashMap<TypeKey, TypeValue>();
Run Code Online (Sandbox Code Playgroud)

现在我想要浏览所有值并打印它们.

我写了这个:

for (TypeValue name : this.example.keySet()) {
    System.out.println(name);
}
Run Code Online (Sandbox Code Playgroud)

它似乎不起作用.

问题是什么?

编辑:另一个问题:这个集合是零基础吗?我的意思是如果它有1个键,值大小是0还是1?

java collections

102
推荐指数
12
解决办法
36万
查看次数

O(n!)的例子?

O(n!)函数的示例(在代码中)是什么?应该参考n运行适当数量的操作; 也就是说,我在问时间的复杂性.

java algorithm complexity-theory big-o factorial

54
推荐指数
7
解决办法
4万
查看次数

面试问题 - 在排序数组X中搜索索引i,使得X [i] = i

我在昨天的采访中被问到以下问题:

考虑一个Java或C++数组,说明X哪个是排序的,其中没有两个元素是相同的.如何最好地找到一个索引,表示i该索引处的元素也是如此i.那是X[i] = i.

作为澄清,她还给了我一个例子:

Array X : -3 -1 0 3 5 7
index   :  0  1 2 3 4 5

Answer is 3 as X[3] = 3.
Run Code Online (Sandbox Code Playgroud)

我能想到的最好的是线性搜索.在采访之后我虽然在这个问题上做了很多但却找不到更好的解决方案.我的论点是:具有required属性的元素可以在数组中的任何位置.所以它也可能在数组的最后,所以我们需要检查每个元素.

我只想在这里向社区证实我是对的.请告诉我我是对的:)

谢谢

c++ java arrays algorithm

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

Java 8泛型:将消费者流量减少到单个消费者

我怎么能写组合的方法StreamConsumers到一个单一的Consumer使用Consumer.andThen(Consumer)

我的第一个版本是:

<T> Consumer<T> combine(Stream<Consumer<T>> consumers) {
    return consumers
            .filter(Objects::nonNull)
            .reduce(Consumer::andThen)
            .orElse(noOpConsumer());
}

<T> Consumer<T> noOpConsumer() {
    return value -> { /* do nothing */ };
}
Run Code Online (Sandbox Code Playgroud)

此版本使用JavaC和Eclipse编译.但它太具体了:Stream不能是a Stream<SpecialConsumer>,如果Consumers不是类型T而是超类型,则不能使用:

Stream<? extends Consumer<? super Foo>> consumers = ... ;
combine(consumers);
Run Code Online (Sandbox Code Playgroud)

这不会合理地编译.改进版将是:

<T> Consumer<T> combine(Stream<? extends Consumer<? super T>> consumers) {
    return consumers
            .filter(Objects::nonNull)
            .reduce(Consumer::andThen)
            .orElse(noOpConsumer());
}
Run Code Online (Sandbox Code Playgroud)

但Eclipse和JavaC都没有编译:
Eclipse(4.7.3a):

该类型Consumer未定义andThen(capture#7-of ? extends Consumer<? super …

java generics java-8 java-stream

31
推荐指数
1
解决办法
1498
查看次数

在Java 9中使用VarHandle的正确方法?

我花了很多时间研究Java 9的一些新功能,但我没有找到任何有用和实用的例子.

考虑下一个创建VarHandle的代码片段:

class Counter {
    int i;
}

class VarHandleInAction {
    static final VarHandle VH_COUNTER_FIELD_I;

    static {
        try {
            VH_COUNTER_FIELD_I = MethodHandles.lookup().
                in(Counter.class).
                findVarHandle(Counter.class, "i", int.class);
        } catch (Exception e) {
            // ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但下一步是什么?我的意思是,如何使用这个可变句柄?你能提供任何真实的例子吗?

java java-9

28
推荐指数
1
解决办法
4404
查看次数

Java lambda方法和新的Object

我有以下代码:

public class RefDemo {

    static class Demo implements Runnable {

        public Demo() {
            System.out.println(this.toString() + "-----");
        }

        @Override
        public void run() {
            System.out.println("run");
        }
    }

    public static void main(String[] args) {
        Runnable runnable = Demo::new; // lambda ref constructor method
        runnable.run(); // does not do anything
        System.out.println(runnable);
        Runnable demo = new Demo(); // using new to create a Demo instance
        demo.run();
        System.out.println(demo);
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个印刷品:

RefDemo$Demo@7291c18f----- // lambda run constructor method print
RefDemo$$Lambda$1/793589513@34a245ab // main method print
RefDemo$Demo@7cc355be-----
run …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8

22
推荐指数
4
解决办法
3044
查看次数

Java Math.abs(int)优化,为什么此代码慢6倍?

如您所知,Math.abs(Integer.MIN_VALUE) == Integer.MIN_VALUE为了防止出现负值,该safeAbs方法已在我的项目中实现:

    public static int safeAbs(int i) {
        i = Math.abs(i);

        return i < 0 ? 0 : i;
    }
Run Code Online (Sandbox Code Playgroud)

我将性能与以下各项进行了比较:

    public static int safeAbs(int i) {
        return i == Integer.MIN_VALUE ? 0 : Math.abs(i);
    }
Run Code Online (Sandbox Code Playgroud)

并且第一个比第二个慢几乎6倍(第二个性能几乎与“纯” Math.abs(int)相同)。从我的角度来看,字节码没有显着差异,但是我猜想差异存在于JIT“汇编”代码中:

“慢”版本:

  0x00007f0149119720: mov     %eax,0xfffffffffffec000(%rsp)
  0x00007f0149119727: push    %rbp
  0x00007f0149119728: sub     $0x20,%rsp
  0x00007f014911972c: test    %esi,%esi
  0x00007f014911972e: jl      0x7f0149119734
  0x00007f0149119730: mov     %esi,%eax
  0x00007f0149119732: jmp     0x7f014911973c
  0x00007f0149119734: neg     %esi
  0x00007f0149119736: test    %esi,%esi
  0x00007f0149119738: jl      0x7f0149119748
  0x00007f014911973a: mov     %esi,%eax
  0x00007f014911973c: add     $0x20,%rsp …
Run Code Online (Sandbox Code Playgroud)

java performance jit x86-64

19
推荐指数
1
解决办法
427
查看次数

将java.util.Date转换为yyyy-MM-dd格式的String,而不创建大量对象

我需要转换java.util.DateStringyyyy-MM-dd格式在一个大的数额.

我刚刚转到java 8并想知道如何正确地做到这一点.我使用Java 7的解决方案如下:

DateTimeFormatter DATE_FORMATTER = DateTimeFormat.forPattern(DATE_FORMAT_PATTERN)

DATE_FORMATTER.print(value.getTime())
Run Code Online (Sandbox Code Playgroud)

它帮助我不创建大量冗余对象.

所以现在当我转到java 8时,我想要正确地重写它,但是:

LocalDate.fromDateFields(value).toString())
Run Code Online (Sandbox Code Playgroud)

每次都创建新LocalDate对象,这为GC提供了大量的工作.

有什么方法可以解决我的问题吗?性能和线程安全非常重要.

经过一些测试后,我发现即使创建新的对象构造:

new SimpleDateFormat("yyyy-MM-dd")).format(value)) 
Run Code Online (Sandbox Code Playgroud)

这个话题最快.

java java-8 java-time

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