concurrent-collections
全部标签 我知道在泛型问世之前已经有人问过这个问题。鉴于Array强制执行返回类型,Array确实有点胜出,它更加类型安全。但是现在,使用最新的JDK7,每次我设计这种类型的API时:publicString[]getElements(Stringtype)vspublicListgetElements(Stringtype)我一直在努力想出一些好的理由来返回ACollection而不是Array或其他方式。在选择String[]或List作为API的返回类型时,最佳做法是什么?或者是马匹类(class)。我心中没有特例,我更想寻找通用的优缺点比较。 最佳答案
什么意思有关于代码Collection? 最佳答案 这意味着您正在处理类型为E的项目集合。想象一下,你有一杯茶。除了茶,它还可以装咖啡,因此将杯子描述为一个通用实体是有意义的:classCup{… }现在您可以用咖啡或茶(或其他东西)填充它:Cupcuppa=newCup();Cupfoamee=newCup();为了让它工作,Tea和Coffee也需要是在您的程序中定义的类型。这是对您的代码的编译时约束。从(相当无用的)杯子示例回来,集合(数组、列表……)通常包含一个类型的项目,例如整数或字符串。泛型帮助您用Java表达:Coll
显然,有两种方法可以获得thread-safeHashSet使用Java的Collections的实例实用类。Collections.newSetFromMap(ConcurrentHashMap)Collections.synchronizedSet(HashSet)我问:它们有何不同?在什么情况下,哪个优先于另一个? 最佳答案 你可能想到的是Setset=Collections.newSetFromMap(newConcurrentHashMap());这支持并发更新和读取。它的迭代器不会抛出ConcurrentModicati
我只想知道为什么java.util.Collections.checkedList()实际使用。我有一些代码,我知道它会返回一个List但它正在通过一系列消息传递调用并作为java.io.Serializable返回给我.那个checkedList调用对我有用吗Serializable进入List?我知道我可以将它转换为java.util.List,但我宁愿不必检查每个元素,而且我不愿意假设每个元素都是String. 最佳答案 它在一定程度上用作调试工具,用于查找代码在何处插入了错误类型的类,以防您看到这种情况发生但无法确定位置。您
我认为是MergeSort,也就是O(nlogn)。但是,以下输出不同意:-1,0000000099000391,00000000990004271,0000000099000427,00000000990003465,0000000099000391,00000000990003461,0000000099000427,00000000990003455,0000000099000391,00000000990003451,0000000099000346,0000000099000345我正在按序号对4个节点的节点列表进行排序,排序进行6次比较。我很困惑,因为6>(4log(4))
AGoogleCollectionsMultiset是一组元素,每个元素都有一个计数(即可能出现多次)。我无法告诉你我想要执行以下操作多少次制作直方图(完全是多重集)从直方图中获取前N个元素示例:前10个URL(按#次提及)、前10个标签(按#次应用)、...给定GoogleCollectionsMultiset,执行#2的规范方法是什么?Here是一篇关于它的博客文章,但该代码并不是我想要的。首先,它返回所有内容,而不仅仅是前N个。其次,它复制(是否有可能避免复制?)。第三,我通常想要确定性排序,即如果计数相等则抢七。其他细节:它不是静态的,等等。 最佳答
我一直在玩我自己的版本,使用“if”,一切似乎都运行良好。当然,如果使用signalAll()而不是signal(),这会严重崩溃,但是如果一次只通知一个线程,这怎么会出错呢?他们的代码here-查看put()和take()方法;在JavaDocforCondition的顶部可以看到一个更简单、更切题的实现。.下面是我实现的相关部分。publicObjectget(){lock.lock();try{if(items.size()=capacity)hasSpace.await();items.addFirst(item);hasItems.signal();return;}catch
这个问题在这里已经有了答案:UsingJava8'sOptionalwithStream::flatMap(12个答案)关闭6年前。有没有更优雅的方法可以在Java8中实际实现这一点?list.stream().map(e->myclass.returnsOptional(e)).filter(Optional::isPresent).map(Optional::get).collect(Collectors.toList());我说的是filter(Optional::isPresent)后跟map(Optional::get),我只想优雅地收集到列表中可选的具有值的结果。
最近,我对某些Java集合没有方法size()的常量时间操作感到惊讶。虽然我了解到集合的并发实现会做出一些妥协,作为并发增益的权衡(ConcurrentLinkedQueue、ConcurrentSkipListSet、LinkedTransferQueue等中的大小为O(n)),但好消息是API文档中对此进行了适当记录。我关心的是方法大小对某些集合方法返回的View的性能。例如,TreeSet.tailSet返回其元素大于或等于fromElement的支持集部分的View。令我非常惊讶的是,对返回的SortedSet调用大小在时间上是线性的,即O(n)。至少这是我设法从OpenJDK