Tag: 集合

使用Collection.stream按特定属性进行动态分组

我试图通过使用Java 8 Collection-Stream按多个属性对对象列表进行分组。 这非常有效: public class MyClass { public String title; public String type; public String module; public MyClass(String title, String type, String module) { this.type = type; this.title = title; this.module= module; } } List data = new ArrayList(); data.add(new MyClass(“1″,”A”,”B”)); data.add(new MyClass(“2″,”A”,”B”)); data.add(new MyClass(“3″,”A”,”C”)); data.add(new MyClass(“4″,”B”,”A”)); Object result = data.stream().collect(Collectors.groupingBy((MyClass m) -> m.type, […]

故障安全迭代器的逻辑是什么?

如果故障安全迭代器创建一个单独的副本并对其进行处理,那么它怎么知道对原始文件所做的任何更改? public class concurrentHashMap { public static void main(String[] args) throws InterruptedException { MapCheck obj1 = new MapCheck(); Thread t1 = new Thread(new Runnable() { @Override public void run() { obj1.put(); } }); Thread t2 = new Thread(new Runnable() { @Override public void run() { obj1.iterte(); } }); t1.start(); t2.start(); t1.join(); t2.join(); } } class […]

Java:CopyOnWriteArrayList vs synchronizedList

CopyOnWritearraylist和Collections.synchronizedList(..)什么区别? 什么时候应该优先于另一个。

关于不可变List(由Arrays.asList()创建)

当我们使用java.util.Arrays.asList()从数组创建列表时,列表是不可变的。 我很想知道为什么我们想要创建一个不可变列表,当List (或Set或Map )的基本目的是具有动态大小并且能够随意添加,删除元素时。 当我们需要一个固定大小的数据结构时,我们选择Array,当我们需要一个动态数据结构时,我们选择List或Set或Map等。那么拥有一个不可变列表的目的是什么? 我在完成任务时遇到了这个问题。

ArrayMap与HashMap

与org.apache.myfaces.trinidad.util.ArrayMap和java.util.HashMap的主要区别是什么? ArrayMap是线程安全的吗? 在文档中提到Array在性能方面是最好的。 我不想使用hashmap或并发hashmap。 我想尝试下面的其他。 哪一个是最佳替代方案如果我考虑线程的安全性和性能? ArrayMap var= new ArrayMap();

Collections.synchronizedList()方法有什么用? 它似乎没有同步列表

我试图使用两个线程将String值添加到ArrayList 。 我想要的是,当一个线程添加值时,另一个线程不应该干扰,所以我使用了Collections.synchronizedList方法。 但似乎如果我没有在对象上显式同步,则以不同步的方式完成添加。 没有显式同步块: public class SynTest { public static void main(String []args){ final List list=new ArrayList(); final List synList=Collections.synchronizedList(list); final Object o=new Object(); Thread tOne=new Thread(new Runnable(){ @Override public void run() { //synchronized(o){ for(int i=0;i<100;i++){ System.out.println(synList.add("add one"+i)+ " one"); } //} } }); Thread tTwo=new Thread(new Runnable(){ @Override public void run() { //synchronized(o){ […]

在HashMap中,为什么阈值(resize的下一个大小值)是capacity * load factor。 为什么不等于地图的大小或容量

在HashMap中,为什么阈值(resize的下一个大小值)是capacity * load factor。 为什么不等于 地图的 大小或容量 。 例如,最初默认容量= 16,负载系数= 0.75,因此threshold = (capacity * load factor) = (16 * 0.75) = 12 。 添加第13个元素的地图resize为什么这样,为什么地图的作者决定保持capacity * load factor (12)? 为什么不与容量相同(16)。 为什么不保持阈值等于容量,以便只在hashmap满了时才进行重组?

一个集合在Java中最终是什么意思?

在Java中将集合声明为final是什么意思? 是不是可以添加更多元素? 是否已经存在的元素无法改变? 还有别的吗?

收集removeAll无视案例?

好的,这是我的问题。 我必须使用HashSet ,我使用removeAll方法删除一个集合中存在的值。 在调用方法之前,我显然将值添加到Set 。 我在添加之前在每个String上调用.toUpperCase() ,因为两个列表中的值都是不同的情况。 这个案子没有押韵或理由。 一旦我调用removeAll ,我需要将原始案例返回给Set中剩下的值。 有没有一种有效的方法可以在不运行原始列表和使用CompareToIgnoreCase情况下执行此操作? 例: 列表1: “BOB” “Joe” “john” “MARK” “dave” “Bill” 列表2: “JOE” “MARK” “DAVE” 在此之后,使用String的toUpperCase()为每个List创建一个单独的HashSet 。 然后调用removeAll 。 Set1.removeAll(set2); Set1: “BOB” “JOHN” “BILL” 我需要让列表再次看起来像这样: “BOB” “john” “Bill” 任何想法将不胜感激。 我知道它很差,应该有原始列表的标准,但这不是我要决定的。

为什么java集合框架中没有直接实现Bag?

我无法弄清楚为什么JCF(Java Collection Framework)没有Bag实现(允许重复而不维护顺序)。 Bag性能比JCF中的当前Collection实现要好得多。 我知道如何在java中实现Bag。 我知道Apache中有一个Bag集合。 我知道我可以使用任何实现作为一个包! 但与Bag相比,在其他实施方面有很多工作要做。 为什么Java Collections框架没有提供像这样的直接实现?