Tag: 集合

Java的Collections.sort(列表,比较器)的排序顺序是什么? 从小到大还是从大到小?

显然,它没有记录,或者我错过了它。 这是文档的链接,下面是文本的图像: 编辑 (17/5):我认为太多人把这个问题混淆为比较问题。 它不是。 比较器比较2个元素。 根据那个比较,列表排序。 怎么样? 升序还是降序? 我将进一步细化/简化问题:如果比较器确定元素A小于元素B. 在排序列表中 ,元素A是否位于比元素B小的索引处?

如果查找键是String,则为EnumMap或HashMap

我试图权衡在HashMap上使用EnumMap优缺点。 因为,我将始终使用String查找,似乎带有String键的HashMap将是正确的选择。 但是, EnumMap似乎更好的设计,因为它传达了我将密钥限制为特定枚举的意图。 思考? 这是一个假想的例子,展示了我将如何使用Map : enum AnimalType { CAT, DOG } interface Animal {} class Cat implements Animal {} class Dog implements Animal {} public class AnimalFactory { private static final Map enumMap = new EnumMap(AnimalType.class); // versus private static final Map stringMap = new HashMap(); static { enumMap.put(AnimalType.CAT, new Cat()); enumMap.put(AnimalType.DOG, new […]

Java中两组的对称差异

我的应用程序中有两个TreeSet : set1 = {501,502,503,504} set2 = {502,503,504,505} 我想获得这些集的对称差异 ,以便我的输出将是集合: set = {501,505}

哪一个更快? List.contains()或Map.containsKey()

我正在写一个算法,在那里我寻找成对的值,当它们加在一起时会产生另一个我正在寻找的值。 我发现使用Map会使我的算法从O(n²)加速。 我后来意识到我并没有真正使用我的Map包含的值,所以List就足够了。 我在Google上进行了powershell搜索,但是在我的问题标题中没有找到关于这些方法的渐近运行时间的任何信息。 你能指出我应该在哪里寻找这些信息吗?

达到HashMap或HashSet最大容量时会发生什么?

几分钟后,我回答了一个问题,询问“ Java中HashMap的最大可能大小 ”。 正如我一直读到的, HashMap是一个可扩展的数据结构。 它的大小仅受JVM内存大小的限制。 因此,我认为它的大小没有硬性限制并相应地回答。 (同样适用于HashSet。) 但有人纠正我说,因为HashMap的size()方法返回一个int ,所以它的大小有限制。 一个完全正确的观点。 我只是尝试在我的本地测试它但失败了,我需要超过8GB的内存来在HashMap中插入超过2,147,483,647个整数,我没有。 我的问题是: 当我们尝试在HashMap / HashSet中插入2,147,483,647 + 1个元素时会发生什么? 是否抛出错误? 如果是,哪个错误? 如果不是HashMap / HashSet会发生什么,它已经存在的元素和新元素? 如果某人有幸拥有16GB内存的机器,那么你可以尝试一下。 🙂

为什么Iterator接口中没有add方法

在Iterator Sun添加了remove方法来删除集合中最后访问的元素。 为什么没有添加方法来向集合中添加新元素? 它可能对集合或迭代器有什么样的副作用?

List vs Queue vs Java中的集合集

列表,队列和集合之间有什么区别?

获取List中对象的属性列表

如果有一个List ,是否有可能获得所有person.getName() List? 是否有一个准备好的调用,或者我必须写一个foreach循环,如: List personList = new ArrayList(); List namesList = new ArrayList(); for(Person person : personList){ namesList.add(personList.getName()); }

如果在列表中间插入,LinkedList是否真的比ArrayList快?

– LinkedList和ArrayList什么区别? 什么时候最好使用LinkedList ? 我认为每个Java开发人员至少在访谈时都听过一次这个问题。 – 如果您希望能够在列表中间插入项目,则最好使用链接列表。 这是这个问题的常见答案。 大家都知道。 每当你问一个关于List实现之间差异的问题时,你会得到如下答案: 我什么时候应该使用LinkedList? 什么时候需要在元素之间或开始时有效删除? 从这里 忘了提到插入费用。 在LinkedList中,一旦你有正确的位置,插入成本为O(1) ,而在ArrayList中它会上升到O(n) – 必须移动经过插入点的所有元素。 从这里 当您希望能够在列表中间插入项目(例如优先级队列)时,链接列表优于数组。 从这里 ArrayList较慢,因为它需要复制部分数组才能删除已经空闲的插槽。 LinkedList只需要操作几个引用。 从这里 和更多… 但你有没有试过自己重现它? 我昨天试过并得到了这些结果: import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class Test { public static void main(String… args) { final int MAX_VAL = 10000; List linkedList = new LinkedList(); List arrayList […]

如何在数组列表中连接字符串值

我需要使用concat一次打印所有的arraylist值。 这是我的代码: ArrayList lst = new ArrayList(); lst.add(“hi”); lst.add(“hello”); Iterator itr = lst.iterator(); String result = null; while(itr.hasNext()) { Object element = itr.next(); result = element + ” “; } System.out.println(result); 预期的结果应该是hi hello 。 然而,当前输出是hello (最后还有一个空格 )。