Tag: 集合

使用Collections.sort对自定义类数组列表字符串进行排序

我试图通过声明我自己的匿名比较器使用Collections.sort对我的自定义类数组列表进行排序。 但这种方式并没有按预期运作。 我的代码是 Collections.sort(arrlstContacts, new Comparator() { public int compare(Contacts lhs, Contacts rhs) { int result = lhs.Name.compareTo(rhs.Name); if(result > 0) { return 1; } else if (result < 0) { return -1; } else { return 0; } } }); 结果不是按排序顺序排列的。

Java 9集合工厂的用法

在List.of()或Collections.emptyList()和List.of(…)或Collections.unmodifiableList()中给出的注释和答案的上下文中,我提出了以下两条经验法则(也适用于Set和Map工厂)。 不要替换所有出现的事件 继续使用Collections.emptyList()以提高可读性,例如初始化惰性字段成员时: class Bean { private List beans = Collection.emptyList(); public List getBeans() { if (beans == Collections.EMPTY_LIST) { beans = new ArrayList(); } return beans; } } 使用新工厂作为方法参数构建器 当使用List参数调用可执行文件时,使用新工厂List.of()和变体作为快速和较少类型的版本。 以下是我目前的替代模式: Collections.emptyList() –> List.of() Collections.singletonList(a) –> List.of(a) Arrays.asList(a, …, z) –> List.of(a, …, z) 在Collections.indexOfSubList的虚构用法中,以下行 Collections.indexOfSubList(Arrays.asList(1, 2, 3), Collections.emptyList()); Collections.indexOfSubList(Arrays.asList(1, 2, 3), Collections.singletonList(1)); Collections.indexOfSubList(Arrays.asList(1, […]

TreeSet没有添加所有元素?

我一直在研究不同Java集合类型的速度,并且遇到了一些奇怪的东西。 我将1,000,000个对象从静态数组添加到不同的集合类型并返回所需的时间。 这部分代码工作正常。 在进一步调查中,我注意到TreeSet没有收到所有1,000,000个对象,并且每次都收到不同的金额。 下面是将对象从数组传输到TreeSet : public int treeSet(int num) { Date before = new Date(); for(int i=0; i<num; i++) { treeSet.add(personsArray[i]); } Date after = new Date(); return (int) (after.getTime() – before.getTime()); } 下面是调用treeSet()方法并测试其大小的代码。 System.out.println(“\tTree set with 1,000,000 objects–” + t.treeSet(1000000)); System.out.println(“Tree set contains ” + t.treeSet.size() + ” elements”); 这个输出是: Tree set with […]

Java HashMap检测冲突

有没有办法在Java哈希映射中检测冲突? 任何人都可以指出可能发生大量碰撞的情况。 当然,如果你覆盖一个对象的哈希码并简单地返回一个常量值,肯定会发生冲突。我不是在谈论那个。我想知道前面提到的其他所有情况都发生了大量的碰撞无需修改默认的哈希码实现。

Collections.shuffle()是否足够随机? 实际的例子似乎否认了这一说法

我在java.util.List有1000个唯一对象,每个对象都引用一个图像,1000个列表中的每个图像都是唯一的,现在我想要将它们混洗,这样我就可以使用前20个对象并呈现它们到网站用户。 然后,用户可以单击“Shuffle”按钮,然后从头开始再次检索1000个图像并再次调用shuffle() 。 然而,似乎在1000个图像对象中,我经常在20个图像选择之间反复看到相同的图像。 有些东西似乎是错的,有什么更好的建议,建议吗? 我的代码非常简单: List imagePaths = get1000Images(); Collections.shuffle(imagePaths); int i = 0; for (String path: imagePaths) { … do something with the path … i++; if (i >= 20) break; } 我知道Collections.shuffle()分布很好:例如参见http://blog.ryanrampersad.com/2012/03/03/more-on-shuffling-an-array-correctly/ 但是,我只是觉得在一组20张图像中一次又一次地看到相同图像的概率应该少得多…… 输入高度赞赏。

什么时候CopyOnWriteArraySet有用来实现线程安全的HashSet?

在Java ,有一个名为ConcurrentHashMap的线程安全版HashMap和一个名为ConcurrentSkipListMap的线程安全版TreeMap ,但是HashSet没有ConcurrentHashSet 。 相反,通常有4种方法可以使用线程安全的Set : Set mySet = Collections.newSetFromMap(new ConcurrentHashMap()); Set s = Collections.synchronizedSet(new HashSet()); ConcurrentSkipListSet CopyOnWriteArraySet 1使用ConcurrentHashMap keySet()来实现Set和线程安全。 2使用synchronized方式,似乎不推荐这种方式。 3基于ConcurrentSkipListMap并被广泛使用。 4基于CopyOnWriteArrayList ,因此它共享CopyOnWriteArrayList的相同基本属性。 以下是从CopyOnWriteArraySet doc中选择的: http : //docs.oracle.com/javase/8/docs/api/java/util/concurrent/CopyOnWriteArraySet.html 它最适合于设置大小通常很小的应用程序,只读操作数量远远超过可变操作,并且您需要在遍历期间防止线程之间的干扰。 它是线程安全的。 变异操作(添加,设置,删除等)很昂贵,因为它们通常需要复制整个底层arrays。 迭代器不支持mutative remove操作。 遍历迭代器的速度很快,不会遇到来自其他线程的干扰。 迭代器在构造迭代器时依赖于不变的数组快照。 由于常用1和3,为什么CopyOnWriteArraySet存在? CopyOnWriteArraySet什么时候有用? 补充: CopyOnWriteArraySet基于CopyOnWriteArrayList ,而List数据结构中的contains操作是O(n),而Set数据结构是针对高性能contains操作的,有人可以解释一下吗?

Java 8 Stream与集合存储

我一直在阅读Java 8 Streams以及从数据源流式传输数据的方式,而不是让整个集合从中提取数据。 特别是我引用了一篇关于Java 8中的流的文章。 “没有存储。流没有值存储;它们通过一系列计算步骤从源(可能是数据结构,生成函数,I / O通道等)传输值。” 来自: http : //www.drdobbs.com/jvm/lambdas-and-streams-in-java-8-libraries/240166818?pgno = 1 我理解从一个源一步一步地流式传输数据的概念。 我不明白的是,如果你是从一个集合流式传输,怎么没有存储? 该集合已存在于Heap中,您只是从该集合中流式传输数据,该集合已存在于“存储”中。 如果我只是通过标准for循环遍历集合,那么内存占用的区别是什么?

在Java ConcurrentHashMap中打印所有键/值对

我试图简单地在ConcurrentHashMap中打印所有键/值对。 我在网上找到了这个代码,我认为会这样做,但它似乎是获取有关桶/哈希码的信息。 其实说实话输出很奇怪,可能我的程序不正确,但我首先要确保这部分是我想要使用的。 for (Entry entry : wordCountMap.entrySet()) { String key = entry.getKey().toString(); Integer value = entry.getValue(); System.out.println(“key, ” + key + ” value ” + value); } 这为大约10个不同的键提供输出,其计数似乎是映射到插入的总插入数的总和。

为什么有人在java中使用Collections.emptyList?

可能重复: Collections.emptyList()与新实例 我试图了解创建列表的新实例之间的区别: new ArrayList 和 Collections.emptyList(); 据我所知,后者返回一个不可变列表。 这意味着无法添加,删除或修改它。 我想知道为什么会创建和不可变的emptyList? 有什么用? 谢谢

什么是LinkedHashMap ?

好的,所以我是这些HashMaps的新手,但对LinkedLists和HashMaps有一些了解。 如果你能给我一些关于LinkedHashMap的简单解释并且在titile中这意味着我们明确地将它定义为某种类型会很棒吗?