Questions tagged «collections»

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




30
一行初始化ArrayList
我想创建用于测试目的的选项列表。首先,我这样做: ArrayList<String> places = new ArrayList<String>(); places.add("Buenos Aires"); places.add("Córdoba"); places.add("La Plata"); 然后,我将代码重构如下: ArrayList<String> places = new ArrayList<String>( Arrays.asList("Buenos Aires", "Córdoba", "La Plata")); 有一个更好的方法吗?

30
按值对Map <Key,Value>进行排序
我对Java比较陌生,经常发现我需要Map&lt;Key, Value&gt;对这些值进行排序。 由于值不是唯一的,因此我发现自己将转换keySet为array,然后使用自定义比较器对数组进行排序,该自定义比较器对与键关联的值进行排序。 有没有更简单的方法?

24
遍历Collection,避免在循环中删除对象时避免ConcurrentModificationException
我们都知道由于以下原因您无法执行以下操作ConcurrentModificationException: for (Object i : l) { if (condition(i)) { l.remove(i); } } 但这显然有时有效,但并非总是如此。这是一些特定的代码: public static void main(String[] args) { Collection&lt;Integer&gt; l = new ArrayList&lt;&gt;(); for (int i = 0; i &lt; 10; ++i) { l.add(4); l.add(5); l.add(6); } for (int i : l) { if (i == 5) { …

30
如何初始化静态地图?
您将如何Map在Java中初始化静态变量? 方法一:静态初始化器 方法二:实例初始化器(匿名子类)或其他方法? 各自的优缺点是什么? 这是说明两种方法的示例: import java.util.HashMap; import java.util.Map; public class Test { private static final Map&lt;Integer, String&gt; myMap = new HashMap&lt;&gt;(); static { myMap.put(1, "one"); myMap.put(2, "two"); } private static final Map&lt;Integer, String&gt; myMap2 = new HashMap&lt;&gt;(){ { put(1, "one"); put(2, "two"); } }; }

12
如何直接初始化HashMap(以字面方式)?
有没有办法像这样初始化Java HashMap? Map&lt;String,String&gt; test = new HashMap&lt;String, String&gt;{"test":"test","test":"test"}; 正确的语法是什么?我还没有发现任何有关此的信息。这可能吗?我正在寻找在地图中放置一些“最终/静态”值的最短/最快方法,这些值永远不会改变,并且在创建地图时会事先知道。


15
Java“双括号初始化”的效率?
Наэтотвопросестьответына 堆栈溢出нарусском:Чтотакое双括号инициализация? 在Java的“ 隐藏功能”中,最常见的答案是Double Brace Initialization,其语法非常诱人: Set&lt;String&gt; flavors = new HashSet&lt;String&gt;() {{ add("vanilla"); add("strawberry"); add("chocolate"); add("butter pecan"); }}; 此成语创建一个匿名内部类,其中仅包含一个实例初始化程序,该实例“可以使用包含范围中的任何方法”。 主要问题:这听起来像效率低下吗?它的使用是否应仅限于一次性初始化?(当然还有炫耀!) 第二个问题:新的HashSet必须是实例初始化程序中使用的“ this”……任何人都可以阐明该机制吗? 第三个问题:这个习惯用法是否太晦涩,无法在生产代码中使用? 摘要:非常非常好的答案,谢谢大家。在问题(3)上,人们认为语法应该明确(尽管我建议您偶尔发表评论,尤其是如果您的代码会传递给可能不熟悉它的开发人员时)。 关于问题(1),生成的代码应快速运行。多余的.class文件确实会导致jar文件混乱,并且会稍微减慢程序启动的速度(这要感谢@coobird进行测量)。@Thilo指出垃圾回收可能会受到影响,并且在某些情况下,额外加载的类的内存成本可能是一个因素。 问题(2)对我来说最有趣。如果我理解答案,那么DBI中发生的事情是匿名内部类扩展了new运算符正在构造的对象的类,因此具有引用此构造实例的“ this”值。井井有条。 总的来说,DBI令我感到好奇。Coobird和其他人指出,使用Arrays.asList,varargs方法,Google Collections和建议的Java 7 Collection文字可以实现相同的效果。较新的JVM语言(例如Scala,JRuby和Groovy)还为列表构建提供了简洁的符号,并且可以与Java很好地互操作。鉴于DBI会使类路径混乱,使类加载速度变慢,并使代码更加模糊,我可能会回避它。但是,我打算将这个介绍给一个刚刚获得SCJP并且喜欢Java语义的自然风趣的朋友!;-) 谢谢大家! 7/2017:Baeldung 对双括号初始化有很好的总结,并认为它是反模式。 12/2017:@Basil Bourque指出在新的Java 9中您可以说: Set&lt;String&gt; flavors = Set.of("vanilla", "strawberry", "chocolate", "butter pecan"); 那肯定是要走的路。如果您使用的是早期版本,请查看Google Collections的ImmutableSet。


18
如何在Java中将数组转换为Set
我想将数组转换为Java中的Set。有一些明显的方法可以做到这一点(例如,循环执行),但是我想要一些更整洁的东西,例如: java.util.Arrays.asList(Object[] a); 有任何想法吗?
717 java  collections  arrays  set 




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.