我需要在两种对象之间有一个映射,比如说,出于演示目的,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创建自己的类吗?
还有其他方法吗?
我有一个高 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 时尚方式”来实现这一点?
我想知道在 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 中启动了一些 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)
后来,我希望做一些操作这个List的Object[]:
[[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 ×3
performance ×2
arrays ×1
collections ×1
hashmap ×1
java-8 ×1
java-stream ×1
list ×1
loops ×1
python ×1
python-3.x ×1