小编May*_*day的帖子

Java HashMap反向方式

我需要在两种对象之间有一个映射,比如说,出于演示目的,String和Long.

我知道HashMap具有O(1)搜索性能,这很棒.我使用的是这样的东西:

HashMap<String, Long> a = new HashMap<String, Long>();
Run Code Online (Sandbox Code Playgroud)

当我想通过密钥搜索时,这很有用.但是,现在我还需要找到按值搜索的键.

如果我开始迭代密钥,那么我将失去性能.

我想到的第一个选择是以另一种方式创建另一个HashMap.

HashMap<Long, String> reverseA = new HashMap<Long, String>();
Run Code Online (Sandbox Code Playgroud)

每当我写一个,写在另一个.

是不是有一个特定的类能够按键和值搜索,具有那么好的性能?

我应该用两个HashMaps创建自己的类吗?

还有其他方法吗?

java collections hashmap

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

如何避免在内部Python风格循环中调用相同的函数

我有一个高 cpu 消耗函数,可以说:

def high_cost_function(p):
  ... lots of operations...
  return p
Run Code Online (Sandbox Code Playgroud)

我想在 python 的内部循环下使用它:

例子:

paths1= ['a','b','c']
paths2= ['b','c','d']
[any(x.startswith(high_cost_function(y)) for x in paths1) for y in paths2]
Run Code Online (Sandbox Code Playgroud)

哪个正确返回:[True, True, False]

然而,正如您所看到的,我被迫调用high_cost_function(y)paths1 中的每个 x。

如果这是一个正常的循环,我可能会简单地这样做:

for y in paths2:
  tmp_var = high_cost_function(y)
  for x in paths1:
    ...
    use tmp_var
    ...
Run Code Online (Sandbox Code Playgroud)

无论如何,有没有以第一个“pythonical 时尚方式”来实现这一点?

python performance loops python-3.x

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

Java null 检查性能

我想知道在 java 中通过直接比较检查对象是否为 null 或使用 Objects.isNull() 方法是否有任何显着差异。

public class Test {

  public final static Long ITERATIONS = 100000000L; 

  @Test
  public void noFnCalls() {
    balong startTime = System.currentTimeMillis();
    Object x = new Object();
    Long i;
    for (i = 0L; i < ITERATIONS; i++) {
      boolean t = x == null;
    }
    long estimatedTime = System.currentTimeMillis() - startTime;
    System.out.println("noFnCalls ellapsed time: " + estimatedTime);
  }

  @Test
  public void withFnCalls() {
    long startTime = System.currentTimeMillis();
    Object x = new Object();
    Long i;
    for …
Run Code Online (Sandbox Code Playgroud)

java performance performance-testing

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

理解java中的stream.map

我在 Java 中启动了一些 SQL 查询,它会返回一些如下所示的数据:

[ ID ,Description,WhateverColumn,...,..., ImportantNumber ]

样本:

[ 1 ,"Desc",...,..., 1 ]

[ 1 ,"Desc",...,..., 2 ]

[ 1 ,"Desc",...,..., 3 ]

[ 2 ,"Desc",...,..., 1 ]

[ 3 ,"Desc",...,..., 3 ]

[ 3 ,"Desc",...,..., 5 ]

我正在使用以下列表将其存储在内存中:

List<Object[]> myList = queryLaunched(...);
Run Code Online (Sandbox Code Playgroud)

后来,我希望做一些操作这个ListObject[]

[[1,"Desc",...,...,1],[1,"Desc",...,...,2],...]

我正在尝试通过以下方式使用 stream.map :

myList.stream().map(item -> System.out.println(item.toString()));
Run Code Online (Sandbox Code Playgroud)

但我只是收到这个错误:

类型不匹配:无法转换Stream<Object>void

无论我在 google 的哪个地方看,我都只能找到用 制作的样品List<Class>,而不是用List<Object[]>.

我怎样才能打印,因此,在它之后,开始对该列表中的每个项目进行操作?

java arrays list java-8 java-stream

0
推荐指数
1
解决办法
123
查看次数