小编Kev*_*ion的帖子

番石榴图书馆和GWT

刚刚发现了番石榴图书馆项目.

这些与GWT一起工作吗?

java gwt guava

41
推荐指数
3
解决办法
1万
查看次数

简单的Java地图拼图

这种通用库方法的最佳实现是什么?

public static <K, V> boolean containsEntry(
    Map<K, V> map, K key, V value) {}
Run Code Online (Sandbox Code Playgroud)

与大多数编码难题一样,判断此谜题的标准依次为:

  1. 完整性
  2. 正确性
  3. 性能
  4. 美女
  5. 收到PayPal捐款

编辑:

好吧,既然关闭了,我不妨发布答案.我认为这可能是最佳的:

  V valueForKey = map.get(key);
  return (valueForKey == null)
      ? value == null && map.containsKey(key)
      : valueForKey.equals(value);
Run Code Online (Sandbox Code Playgroud)

一个聪明的简单解决方案是:

  return map.entrySet().contains(
      new AbstractMap.SimpleImmutableEntry<K, V>(key, value));
Run Code Online (Sandbox Code Playgroud)

它确实分配了一个实例,但它为地图实现提供了更多机会来做一些最佳的事情.

java puzzle collections

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

如何使用可用RAM有效地在Java中缓存对象?

我需要使用一定比例的可用RAM来缓存Java中的对象.我知道其他人已经提出了这个问题,但没有一个回复符合我的要求.

我的要求是:

  • 简单轻巧
  • 并不比普通的HashMap慢得多
  • 使用LRU或一些近似LRU的删除策略

我尝试使用LinkedHashMap,但是它要求你指定最大数量的元素,我不知道填充可用RAM需要多少元素(它们的大小会有很大差异).

我目前的方法是使用Google Collection的MapMaker,如下所示:

Map<String, Object> cache = new MapMaker().softKeys().makeMap();
Run Code Online (Sandbox Code Playgroud)

这看起来很有吸引力,因为它应该在需要更多RAM时自动删除元素,但是存在一个严重的问题:它的行为是填满所有可用的RAM,此时GC开始抖动,整个应用程序的性能急剧恶化.

我听说过像EHCache这样的东西,但它对于我需要的东西似乎相当重,而且我不确定它是否足够快我的应用程序(记住解决方案不能比HashMap慢得多) .

java caching soft-references guava

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

是否可以返回unmodifiableList或者我应该返回数组?

我有List<Foo> getFoos ()从远程服务器获取数据并返回它的方法.

当然,用户不应该更改列表中的项目数量,因为他将获得与服务器上的数据不同步的数据(并且如果他想要更改他具有特殊方法的项目数量addFoo ()).

第一种方法是返回数组和更改方法的签名Foo[] getFoos ().但它在java中更常见,用户使用集合操作更方便,所以我将签名更改为List<Foo> getFoos ().此方法始终返回

Collections.unmodifiableList (originalList)

因此,当用户尝试更改列表时,他将获得RuntimeException.

在类似案例中是否有关于api设计的建议?

java oop collections api-design

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

16
推荐指数
2
解决办法
1871
查看次数

大多数Iterators和Iterables方法都是LAZY!这是什么意思

演讲中有一篇说"这些方法很懒散!"

Iterable transform(Iterable, Function)*
Iterable filter(Iterable, Predicate)*
T find(Iterable<T>, Predicate)
Iterable concat(Iterable<Iterable>)
Iterable cycle(Iterable)
T getOnlyElement(Iterable<T>)
Iterable<T> reverse(List<T>)
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解他们的意思,让我说我有一个集合,Persons我应用过滤器只返回姓氏为DOE的人.

那么这是否意味着"过滤仅在第一次调用doeOnly.next()时发生?"

List<Person> persons= ....
Iterable doeOnly= Iterables.filter(persons,DOE_AS_LAST_NAME_PREDICATE);
Run Code Online (Sandbox Code Playgroud)

java collections iterator guava

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

给我一个Multi-set的实际用例

我想知道一些实际的用例(如果它们与任何编程语言没有关联/关系会更好).我可以将集合,列表和映射与实际用例相关联.

例如,如果您想要一本书的词汇表,其中您想要的术语按字母顺序列出,并且位置/页码是值,您将使用集合TreeMap(OrderedMap这是一个Map)

不知何故,我无法将MultiSets与任何"实用"用例相关联.有人知道有什么用途吗?

http://en.wikipedia.org/wiki/Multiset并没有告诉我足够的:)

PS:如果你们认为这应该是社区维基,那就没关系.我没有这么做的唯一原因是"有一个明确的客观方式来回答这个问题".

collections guava

15
推荐指数
2
解决办法
2959
查看次数

java.util.Map的通用测试工具?

我有一个Map接口的自定义实现,它做了一些奇特的东西,比如懒惰的函数评估.从外部构造后,实现应该是不可变的(例如,不支持put()和putAll()方法)

我看起来它在最基本的条件下工作.由于它非常复杂,我相信必须有大量潜在的错误,线程安全,不规则的操作顺序等等.

由于Map接口的合约定义明确,我确信必须存在一个通用的测试集合,用于检查角落情况,线程安全等.

我听说Google Collections为他们的库运行了大约25000个单元测试.可以在某处下载它们吗?

java collections unit-testing guava

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

哪里是google-collection的LazyMap?

我最喜欢的一个来自apache commons-collections的是LazyMap,它可以在运行时使用Transformer实例化实例化值map.get(newKey); // Will not return null!.

为什么谷歌收藏品不一样?

java collections guava

10
推荐指数
2
解决办法
3389
查看次数

使用Google Collections创建弱多图

是否有相当于MultiMaps的漂亮MapMaker?目前我创建这样的缓存:

    public static Map<Session,List<Person>> personCache = new MapMaker().weakKeys().makeMap();
Run Code Online (Sandbox Code Playgroud)

MultiMap的重点是避免嵌套的List值.有没有办法用弱键构造多图?

java weak-references multimap guava

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