相关疑难解决方法(0)

HashMap得到/放置复杂性

我们习惯说HashMap get/put操作是O(1).但是它取决于哈希实现.默认对象哈希实际上是JVM堆中的内部地址.我们是否确定声称get/putO(1)是否足够好?

可用内存是另一个问题.据我所知,从javadocs,HashMap load factor应该是0.75.如果我们在JVM中没有足够的内存且load factor超出限制怎么办?

所以,看起来O(1)似乎不能保证.它有意义还是我错过了什么?

java complexity-theory hashmap data-structures

117
推荐指数
5
解决办法
13万
查看次数

Java中的双向映射?

我在Java中有一个简单的整数到字符串映射,但我需要能够轻松地从整数中检索字符串,并且还能从字符串中检索整数.我已经尝试了Map,但它只能从整数中检索字符串,这是一种方式:

private static final Map<Integer, String> myMap = new HashMap<Integer, String>();
// This works one way:
String myString = myMap.get(myInteger);

// I would need something like:
Integer myInteger = myMap.getKey(myString);
Run Code Online (Sandbox Code Playgroud)

有没有正确的方法来实现这两个方向?

另一个问题是我只有一些不会改变的常数值(1->"low", 2->"mid", 3->"high"因此,找一个复杂的解决方案是不值得的.

java map apache-commons guava

79
推荐指数
6
解决办法
8万
查看次数

双向地图

你能否建议一种地图或类似的数据结构,我们可以同样轻松地获得彼此的价值和关键.也就是说,每个都可以用于寻找其他.

java dictionary

53
推荐指数
5
解决办法
2万
查看次数

使用值从HashMap获取密钥

我想使用该值获取HashMap的键.

hashmap = new HashMap<String, Object>();

haspmap.put("one", 100);
haspmap.put("two", 200);
Run Code Online (Sandbox Code Playgroud)

这意味着我想要一个值为100的函数,并返回一个字符串.

似乎这里有很多问题要求同样的事情,但它们对我不起作用.

也许是因为我是java新手.

怎么做?

java collections hashmap

27
推荐指数
4
解决办法
14万
查看次数

存储密钥值对的最佳Java数据结构

可能重复:
Java Hashmap:如何从值获取密钥?
Java中的双向映射?

我想key value data structure用于Android应用程序.我可以使用Map<K,V>,但在Map我无法获得特定值的关键.

是否有任何良好的Java数据结构,我可以使用它来按值检索密钥,反之亦然.

java android

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

Java 8从Map中的匹配值中提取第一个键

假设我有一个给定名称,姓氏对的地图,我想找到该地图中第一个条目的名称,该名称的姓氏与某个值相匹配.我们如何以java 8的方式做到这一点.

在我下面的测试用例中,我提出了两种方法.

然而,第一个(寻找姓氏为"Donkey"的第一个人的名字)将抛出java.util.NoSuchElementException:没有值存在,因此它不安全.

第二个工作,但它不仅难以阅读,但它有点不太实用.

只是不知道是否有人在这里会建议我实现这个要么使用一个更简单更清晰的方式stream()forEach()或两者兼而有之.

@Test
public void shouldBeAbleToReturnTheKeyOfTheFirstMatchingValue() throws Exception {
    Map<String, String> names = new LinkedHashMap<>();
    names.put("John", "Doe");
    names.put("Fred", "Flintstone");
    names.put("Jane", "Doe");
    String keyOfTheFirst = names.entrySet().stream().filter(e -> e.getValue().equals("Doe")).findFirst().get().getKey();
    assertEquals("John", keyOfTheFirst);

    try {
        names.entrySet().stream().filter(e -> e.getValue().equals("Donkey")).findFirst().get();
    } catch (NoSuchElementException e){
        // Expected
    }

    Optional<Map.Entry<String, String>> optionalEntry = names.entrySet().stream().filter(e -> e.getValue().equals("Donkey")).findFirst();
    keyOfTheFirst = optionalEntry.isPresent() ? optionalEntry.get().getKey() : null;

    assertNull(keyOfTheFirst);
}
Run Code Online (Sandbox Code Playgroud)

先感谢您.

java lambda optional java-8 java-stream

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

数据结构代表多对多的关系

如果我们有学生和课程实体,并且他们之间的关系是多对多的,即学生可以参加许多课程,许多学生可以参加课程.如果我们必须代表这种关系,那么我们可以通过哪种方式来表示这种关系.如果我们使用hashmap与学生作为关键和学生作为值的课程列表,那么我们需要另一个hashmap,通过它我们可以表示课程与学生的关系.有没有最好的方式来表示这种关系,以便快速搜索.

java collections data-structures

13
推荐指数
2
解决办法
4052
查看次数

如何将用户UID存储在firebase数据库中并使其映射到POJO

CONTEXT

我目前正在开发Firebase应用程序(在Android中).我已经设置了身份验证,存储和数据库,没有任何问题可言.由于Firebase身份验证用户只有一些属性,我创建了一个"用户"POJO来存储Firebase身份验证用户中未包含的其他用户信息(即名字,出生日期,国籍等...) .其结构如下图所示:

结构演示

图像中的UUID是用户各自的身份验证.这是通过以下方式实现的:

ref.child(users).child(auth.getUid()).setValue(user);
Run Code Online (Sandbox Code Playgroud)

这种方法似乎与文档一致,因为它允许我使用auth.uid === $uid规则限制对帐户所有者的写入/读取.此外,树内的所有属性都按预期映射到我的POJO.

问题

我的一个大问题是我想将用户uid存储在POJO中.由于UID当前被构造为父对象,我不确定如何将其映射到用户POJO.我当然可以在底层树中存储一个额外的字段.但是,这似乎是毫无意义的数据冗余.

将uid映射到相应的"用户"POJO类的最佳方法是什么.理想情况下,我可以获取10个用户进行显示,当点击一个用户时,应用程序会加载配置文件活动.这意味着传递用户的uid,所以我可以说:

ref.child(users).child(targetUID)
Run Code Online (Sandbox Code Playgroud)

并获取已点击的用户帐户.这意味着拥有他们的uid.

java mapping android firebase firebase-realtime-database

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

我可以在Java中使用键 - 键映射(而不是键值)吗?

如果我不仅需要快速搜索密钥而且还需要按价值搜索,该怎么办?换句话说,是否存在类似键值的结构而不是键值?

java map

8
推荐指数
2
解决办法
182
查看次数

查找HashMap是否包含所选值和返回键

有没有办法找到我的HashMap<String, String>包含值="x"的条目(键,值)并按顺序遍历所有条目?

java

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