Questions tagged «collections»

集合API为开发人员提供了一组类和接口,使处理对象集合更加容易。

5
Clojure:缺点(seq)与缺点(清单)
我知道这会cons返回一个seq并conj返回一个集合。我也知道,conj将项目“添加”到集合的最佳末端,并且cons始终将其“添加”到最前面。此示例说明了以下两点: user=> (conj [1 2 3] 4) ; returns a collection [1 2 3 4] user=> (cons 4 [1 2 3]) ; returns a seq (4 1 2 3) 对于矢量,地图和集合,这些差异对我来说很有意义。但是,对于列表,它们似乎相同。 user=> (conj (list 3 2 1) 4) ; returns a list (4 3 2 1) user=> (cons 4 (list 3 …

6
Java:遍历Collection的最佳方法(此处为ArrayList)
今天,当我获得一段已经使用了数百次的代码时,我很高兴地开始编码: 遍历一个Collection(这里是ArrayList) 由于某种原因,我实际上查看了Eclipse的自动完成选项,这让我感到奇怪: 在哪些情况下,以下循环比其他情况更好使用? 经典的数组索引循环: for (int i = 0; i < collection.length; i++) { type array_element = collection.get(index); } 迭代器具有next()/ next(): for (Iterator iterator = collection.iterator(); iterator.hasNext();) { type type = (type) iterator.next(); } 我最喜欢的是因为它写起来很简单: for (iterable_type iterable_element : collection) { }

10
Java中有序集的任何实现吗?
如果有人熟悉Objective-C中有一种叫做集合NSOrderedSet,它充当一个集及其项目可以作为访问数组的人。 Java中有类似的东西吗? 我听说有一个名为的集合LinkedHashMap,但没有找到类似的集合。
98 java  collections  set 


16
C#可排序集合,允许重复的键
我正在编写一个程序来设置顺序,在该顺序中各种对象将出现在报表中。序列是Excel电子表格上的Y位置(单元格)。 下面是代码的演示部分。我想要完成的是拥有一个集合,这将使我可以添加多个对象,并且我可以基于序列获得排序的集合 SortedList list = new SortedList(); Header h = new Header(); h.XPos = 1; h.name = "Header_1"; list.Add(h.XPos, h); h = new Header(); h.XPos = 1; h.name = "Header_2"; list.Add(h.XPos, h); 我知道SortedList不允许这样做,并且我一直在寻找替代项。我不想删除重复项,并且已经尝试过了List<KeyValuePair<int, object>>。 谢谢。

11
结合多个元素集合的优雅方式?
假设我有任意数量的集合,每个集合都包含相同类型的对象(例如List<int> foo和List<int> bar)。如果这些集合本身是一个集合(例如类型)List<List<int>>,则可以SelectMany将它们全部组合成一个集合。 但是,如果这些集合不在同一个集合中,给我的印象是我必须编写这样的方法: public static IEnumerable<T> Combine<T>(params ICollection<T>[] toCombine) { return toCombine.SelectMany(x => x); } 然后我会这样称呼它: var combined = Combine(foo, bar); 是否有一种干净,优雅的方式来组合(任意数量)集合,而不必编写上述实用程序方法Combine?看起来很简单,应该可以在LINQ中做到这一点,但也许不是。

5
为什么Collections.sort使用Mergesort但Arrays.sort不使用?
我正在使用JDK-8(x64)。对于Arrays.sort(原始),我在Java文档中发现了以下内容: 排序算法是Vladimir Yaroslavskiy,Jon Bentley和Joshua Bloch编写的Dual-Pivot Quicksort。 对于Collections.sort(对象),我找到了“ Timsort”: 此实现是一个稳定的,自适应的,迭代的mergesort ...该实现将指定的列表转储到数组中,对数组进行排序,然后遍历列表,从数组中的相应位置重置每个元素。 如果Collections.sort使用数组,为什么不调用Arrays.sort或使用双轴QuickSort?为什么要使用Mergesort?

7
我可以对Dictionary <TKey,TValue>条目使用集合初始化程序吗?
我想在下一段代码中使用集合初始化程序: public Dictionary&lt;int, string&gt; GetNames() { Dictionary&lt;int, string&gt; names = new Dictionary&lt;int, string&gt;(); names.Add(1, "Adam"); names.Add(2, "Bart"); names.Add(3, "Charlie"); return names; } 所以通常应该是这样的: return new Dictionary&lt;int, string&gt; { 1, "Adam", 2, "Bart" ... 但是正确的语法是什么?

10
创建原始int列表?
有没有一种方法可以创建基本类型int或Java中任何基本类型的列表,如下所示? List&lt;int&gt; myList = new ArrayList&lt;int&gt;(); 看来我能做到 List myList = new ArrayList(); 并将“ int”添加到此列表中。但这意味着我可以在此列表中添加任何内容。 我唯一的选择是创建一个int数组并将其转换为一个列表或创建一个Integer对象的列表吗?



3
如何将“丰富我的图书馆”模式应用于Scala集合?
Scala中可用的最强大的模式之一是rich-my-library *模式,它使用隐式转换来显示将方法添加到现有类中,而无需动态方法解析。例如,如果我们希望所有字符串都具有spaces计算它们拥有多少空白字符的方法,我们可以: class SpaceCounter(s: String) { def spaces = s.count(_.isWhitespace) } implicit def string_counts_spaces(s: String) = new SpaceCounter(s) scala&gt; "How many spaces do I have?".spaces res1: Int = 5 不幸的是,这种模式在处理通用集合时会遇到麻烦。例如,有人问了一些有关按集合顺序对项目进行分组的问题。没有内置的功能可以一次性完成,因此这似乎是使用通用集合C和通用元素类型的“丰富我的图书馆”模式的理想选择A: class SequentiallyGroupingCollection[A, C[A] &lt;: Seq[A]](ca: C[A]) { def groupIdentical: C[C[A]] = { if (ca.isEmpty) C.empty[C[A]] else { val first = …


1
HashSet <T> .removeAll方法出奇的慢
乔恩·斯凯特(Jon Skeet)最近在他的博客上提出了一个有趣的编程主题:“我的抽象中有一个漏洞,亲爱的Liza,亲爱的Liza”(强调): 我有一套- HashSet实际上。我想从中删除一些项目……许多项目可能不存在。实际上,在我们的测试案例中,“删除”集合中的所有项目都不在原始集中。这听起来(确实是)非常容易编码。毕竟,我们Set&lt;T&gt;.removeAll需要帮助我们,对吧? 我们在命令行上指定“源”集的大小和“删除”集合的大小,然后构建它们两者。源集仅包含非负整数;清除集仅包含负整数。我们将使用来测量删除所有元素所需的时间System.currentTimeMillis(),这并不是世界上最精确的秒表,但是在这种情况下,这已经足够了。这是代码: import java.util.*; public class Test { public static void main(String[] args) { int sourceSize = Integer.parseInt(args[0]); int removalsSize = Integer.parseInt(args[1]); Set&lt;Integer&gt; source = new HashSet&lt;Integer&gt;(); Collection&lt;Integer&gt; removals = new ArrayList&lt;Integer&gt;(); for (int i = 0; i &lt; sourceSize; i++) { source.add(i); } for (int i …

6
使用流通过自定义比较器收集到TreeSet中
在Java 8中,我有一个TreeSet这样的定义: private TreeSet&lt;PositionReport&gt; positionReports = new TreeSet&lt;&gt;(Comparator.comparingLong(PositionReport::getTimestamp)); PositionReport 是一个相当简单的类,定义如下: public static final class PositionReport implements Cloneable { private final long timestamp; private final Position position; public static PositionReport create(long timestamp, Position position) { return new PositionReport(timestamp, position); } private PositionReport(long timestamp, Position position) { this.timestamp = timestamp; this.position = …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.