Tag: 集合

为什么Collections.max()不返回String集合的实际最大值?

ArrayList dirNo = new ArrayList(); dirNo.add(“1”); dirNo.add(“2”); dirNo.add(“3”); dirNo.add(“4”); dirNo.add(“5”); dirNo.add(“6”); dirNo.add(“7”); dirNo.add(“8”); dirNo.add(“9”); dirNo.add(“10”); dirNo.add(“11”); System.out.println(“max : ” + Integer.parseInt(Collections.max(dirNo))); 执行上述代码后,打印9作为输出。 但实际上最大值应该是11 。 为什么我最多得9 ?

如何将单个元素列表转换为java 8可选

如何很好地将包含一个或零个元素的列表转换为Optional? 丑陋的代码: List integers = new ArrayList(); Optional optional = integers.size() == 0 ? Optional.empty() : Optional.of(integers.get(0));

为什么没有ArrayList(T t)构造函数?

以这种方式通过对象数组初始化列表是很常见的: Foo[] objs = …; ArrayList list = new ArrayList(Arrays.asList(objs)); 我想知道,有没有理由为什么ArrayList的desiner没有包含带数组作为参数的构造函数,所以它可以像这样初始化: ArrayList list = new ArrayList(objs); 可能违反了一些原则,线程安全或其他什么?

为什么Collections类包含独立(静态)方法,而不是将它们添加到List接口?

对于将List作为第一个参数的集合中的所有方法,为什么这些方法不仅仅是List接口的一部分? 我的直觉是:给定一个List对象,该对象本身应“知道”如何对自身的操作执行,如rotate(),shuffle()或reverse()。 但相反,作为一名Java程序员,我必须检查List接口中的方法,以及Collections类中“在那里”的静态方法,以确保我使用规范解决方案。 为什么有些方法作为静态独立方法放在Collections类中,而不是添加到List接口(并且可能因此由某些现有或可能的基类实现)? 我正在努力更好地理解Java集合框架背后的设计决策。 这里有一些令人信服的OO设计原则,我忽略了吗? 或者仅仅出于某种实际的性能原因,这种区别是否已经完成

具有键/值对的java集合,并根据插入顺序排序

我想要一些可以插入键/值对的东西,顺序就是我插入项目的顺序。 我看过一些关于地图的post,但似乎我必须为它们编写自己的比较器。 我希望我插入的第一个项目是第一个存储,第二个项目是集合中的第二个项目,等等。

洞察集合removeAll方法

我有一个大小〜200k的列表..我在过滤列表时遇到了一些问题。 这是实施: public List filterList(List listToBeFiltered){ List removeElementsFromList = listToBeFiltered.parallelStream() .filter(//some filtering logic) .collect(Collectors.toList()); listToBeFiltered.removeAll(removeElementsFromList); return listToBeFiltered; } 我面对代码的问题是,当removeElementsFromList接近listToBeFiltered的大小时,程序将一直停留在removeAll语句中。 非常感谢任何见解/替代解决方案。

生产者/消费者 – 生产者将数据添加到集合中而不会阻塞,消费者会批量使用集合中的数据

我有一个生产者/消费者用例,这有点不寻常。 我有一些真实世界的用例,我希望他们能够在没有阻塞的情况下将对象添加到集合中。 消费者(只有一个)应该阻止,直到集合中有一定数量的对象可用(例如500),然后批量消费它们。 虽然少于500,但它应该阻止并等待集合填充。 我不介意队列是否超过这个值(700,1000等)很短的时间。 我目前似乎没有找到解决这个确切问题的解决方案。 我正在考虑使用ConcurrentLinkedQueue并让消费者定期检查队列是否有足够的数据,但这似乎适得其反。 另一个想法是使用LinkedBlockingQueue。 生产者不会阻止(除非队列已满,这意味着它有Integer.MAX_VALUE值 – 这不是我的情况,所以这一切都很好)。 使用者将执行queue.take()并将元素添加到内部集合中。 当内部集合达到500个元素时,它将批量使用它们。 你有什么建议吗? 谢谢!

RandomAccess接口,为什么没有方法?

我正在阅读Collections.shuffle(List)javadoc ,然后看看RandomAccess javadoc : List实现使用的标记接口,表示它们支持快速(通常是恒定时间)随机访问。 […] 我想知道为什么这个接口(如Serializable)没有方法? 这个的设计原因是什么? 即使只有列表“实现”此接口,为什么不将E get()设置为方法呢? 我知道并非每个列表都是随机访问,但如果没有方法,我怎么能使用这个接口呢? 像这样的东西: if(object instanceof RandomAccess){ // should I cast it if no operations can be done? why? } 此外,只有列表可以是RandomAccess? 文件怎么样?

如何对包含数字的String集合进行排序?

我有一个包含这样的数据的字符串向量: 5:34,5:38,17:21,22:11,…… 如果我尝试使用Collections.sort(…)合并它; 它会显示如下: 17:21,22:11,5:34,5:38 其实我希望它看起来像这样: 5:34,5:38,17:21,22:11 所以我想根据冒号“:”之前的数字对元素进行排序,然后如果某些元素在“:”之前具有相同的数字,则根据“:”之后的数字对它们进行排序。 最简单的方法是什么?

寻找一个圆形固定大小的基于arrays的双端队列

我正在寻找具有以下特征的Deque : 它有固定的大小 如果我在相反端的头/尾元素处添加元素就会丢失 它是基于数组的,所以我可以在恒定的时间内访问随机元素 我可以在前面或末尾添加元素(双端) 我检查了JCF中的Deque实现,但是我找不到合适的东西。