HashSet基于HashMap.
如果我们看一下HashSet<E>
实现,一切都在管理之下HashMap<E,Object>
.
<E>
被用作关键词HashMap
.
我们知道这HashMap
不是线程安全的.这就是我们ConcurrentHashMap
在Java中的原因.
基于此,我很困惑,为什么我们没有一个应该基于的ConcurrentHashSet ConcurrentHashMap
?
还有什么我想念的吗?我需要Set
在多线程环境中使用.
另外,如果我想创建我自己的ConcurrentHashSet
,我可以通过替换HashMap
to来实现它,ConcurrentHashMap
并将其余部分保留原样?
在Java中有SortedSet
和SortedMap
接口.两者都属于Java的标准集合框架,并提供了一种访问元素的排序方式.
但是,根据我的理解SortedList
,Java中没有.您可以使用java.util.Collections.sort()
对列表进行排序.
知道为什么它的设计是这样的吗?
我看到人们正在使用any
收集另一个列表来查看列表中是否存在某个项目,但是有一个快速的方法可以做到吗?:
if list.contains(myItem):
# do something
Run Code Online (Sandbox Code Playgroud) 我有一个ArrayList<String>
,我想从中删除重复的字符串.我怎样才能做到这一点?
如果我有一个List<List<Object>>
,我如何List<Object>
通过使用Java 8的功能将其转换为包含相同迭代顺序中的所有对象?
有谁知道Set
在C#中是否有与Java 集合相当的好处?我知道你可以使用a Dictionary
或者HashTable
通过填充而忽略值来模仿一个集合,但这不是一个非常优雅的方式.
我正在玩Java 8 lambdas来轻松过滤集合.但我没有找到一种简洁的方法来将结果作为新列表检索到同一语句中.到目前为止,这是我最简洁的方法:
List<Long> sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L);
List<Long> targetLongList = new ArrayList<>();
sourceLongList.stream().filter(l -> l > 100).forEach(targetLongList::add);
Run Code Online (Sandbox Code Playgroud)
网上的例子没有回答我的问题,因为他们停止而没有生成新的结果列表.必须有一个更简洁的方式.我本来期望的是,Stream
类有方法为toList()
,toSet()
,...
有没有办法targetLongList
可以直接由第三行分配变量?
套装似乎是一个很好的方式来创建保证唯一的元素数组,但它不公开任何好的办法来获取属性,除了发电机[设置] .values,被称为在一个尴尬的方式mySet.values.next()
.
如果您可以map
在集合上调用和类似的函数,那就没问题了.但你也不能这样做.
我试过了Array.from
,但似乎只是将类似数组(NodeList和TypedArrays?)的对象转换为Array.另一个尝试:Object.keys
对Sets不起作用,而Set.prototype没有类似的静态方法.
所以,问题是:是否有任何方便的内置方法来创建具有给定Set值的数组?(元素的顺序并不重要).
如果没有这样的选择,那么也许有一个很好的惯用的单行代码呢?喜欢,使用for...of
或类似?
在Java 8中,如何Stream
通过检查每个对象的属性的清晰度来使用API 过滤集合?
例如,我有一个Person
对象列表,我想删除具有相同名称的人,
persons.stream().distinct();
Run Code Online (Sandbox Code Playgroud)
将使用Person
对象的默认相等检查,所以我需要像,
persons.stream().distinct(p -> p.getName());
Run Code Online (Sandbox Code Playgroud)
不幸的是,该distinct()
方法没有这种过载.如果不修改类中的相等性检查,Person
是否可以简洁地执行此操作?
在我的应用程序中,我使用第三方库(确切地说是MongoDB的Spring Data).
这个库的方法返回Iterable<T>
,而我的其余代码需要Collection<T>
.
有什么实用方法可以让我快速将一个转换为另一个吗?我想避免foreach
在我的代码中为这么简单的事情创建一堆循环.
collections ×10
java ×6
java-8 ×3
java-stream ×2
list ×2
.net ×1
arraylist ×1
arrays ×1
c# ×1
concurrency ×1
contains ×1
duplicates ×1
hashmap ×1
hashset ×1
javascript ×1
lambda ×1
python ×1
search ×1
set ×1
sorting ×1
syntax ×1