草庐IT

immutable-collections

全部标签

java - 使用 Google Collection MapMaker?

我刚看到这个answerinSO其中提到GoogleCollectionMapMaker太棒了。我仔细阅读了文档,但无法真正弄清楚我可以在哪里使用它。任何人都可以指出一些适合使用MapMaker的场景。 最佳答案 这是我使用MapMaker的一种方式的快速示例:privatefinalConcurrentMapfooCache=newMapMaker().softValues().makeComputingMap(newFunction(){publicFooapply(Longid){returngetFooFromServer(

java - 在 Java 中与不可变对象(immutable对象)共享内部结构是什么意思?

我一直在阅读EffectiveJava并且我看到这样的说法:您不仅可以共享不可变对象(immutable对象),还可以共享它们的内部结构。但是,我正在努力弄清楚这真正的含义,并且示例肯定会有所帮助,因为书中没有给出示例。我已经知道不可变对象(immutable对象)无法更改,例如String。 最佳答案 阅读book进一步:TheBigIntegerclassusesasign-magnituderepresentationinternally.Thesignisrepresentedbyanintandthemagnitudeis

具有元素超时的 Java Collection 实现

是否有一些支持元素过期的集合实现。例如:CollectioncachedUsers=newExpirableList(10000);在哪里publicExpirableList(finallongtimeout){...}在给定时间后(在这个特定示例中为10000ms),添加的元素将从集合中删除。通过使用它,我们将防止我们的cachedUsers集合溢出。 最佳答案 是的,Guava支持定时过期的缓存。参见GuavaExplained'spageoncaches.另一种方法是LRU(最近最少使用)缓存,它在插入新元素时处理最早访问的

java - 2个系列之间的区别? (collection1 中的元素,但不在 collection2 中)

在Java中(也许使用Guava?),是否提供了一些方法来获取两个Collection的差异,例如一个List和一个Set没有修改这些Collection之一(否则会有collection1.全部删除(集合2)?在Guava中有Sets.difference(set1,set2),但它只适用于Set,不适用于任意集合。感谢任何提示! 最佳答案 您可以使用内置的Predicate过滤第一个Collection:Collections2.filter(c1,Predicates.not(Predicates.in(c2))它适用于任何类

java - 泛型:无法从 Collections.emptyList() 转换为 List<String>

为什么publicListgetList(){if(isMyListOKReady())returnmyList;returnCollections.emptyList();}编译很好,但是对于publicListgetList(){returnisMyListReady()?myList:Collections.emptyList();}Eclipse说"Typemismatch:cannotconvertfromListtoList"? 最佳答案 您需要注意空列表的类型安全。所以像这样返回空字符串列表publicListgetL

java - 如何根据 Collection 值的大小对 Map 进行排序?

我有一个像这样的HashMap:Map>map=newHashMap();map.put("USA",Arrays.asList("CA","IA","IL"));map.put("India",Arrays.asList("MUM","CAL"));map.put("Canada",Arrays.asList("TOR"));我想根据列表值的大小对map进行升序排序。我该怎么做?在这种情况下,我想订购加拿大、印度、美国的key。 最佳答案 HashMap没有保证的迭代顺序,因此您需要收集到LinkedHashMap为了使排序有意义

immutability - 不可变 JDK 类的完整列表?

jdk中是否有事实上不可变类的列表?技术上不可变类包括明显的Integer、Double等。事实上的不可变将包括例如java.lang.String-它在技术上可能是可变的,但事实上它不是。此外,是否存在要求(如javadoc中所述)不可变的接口(interface)/抽象类?如果您不能提供完整的列表,如果您知道一堆在其javadoc中声明不可变性的类,我会很高兴。 最佳答案 我尽可能多地编译列表:java.lang.字符串基本类型的包装类:java.lang.Integerjava.lang.Bytejava.lang.Chara

java - 创建没有最终字段的不可变对象(immutable对象)?

我们可以创建一个不可变对象(immutable对象)而不需要所有字段都为final吗?如果可能的话,举几个例子会有帮助。 最佳答案 将所有字段声明为私有(private)并仅定义getter:publicfinalclassPrivate{privateinta;privateintb;publicintgetA(){returnthis.a;}publicintgetB(){returnthis.b;}}引用@JonSkeet的评论,final类修饰符可用于:WhileaninstanceofjustPrivateisimmuta

java - 使用 Collection.stream 按特定属性动态分组

我正在尝试使用Java8Collection-Stream按多个属性对对象列表进行分组。这很好用:publicclassMyClass{publicStringtitle;publicStringtype;publicStringmodule;publicMyClass(Stringtitle,Stringtype,Stringmodule){this.type=type;this.title=title;this.module=module;}}Listdata=newArrayList();data.add(newMyClass("1","A","B"));data.add(new

java - 使用 Collection 接口(interface)创建 ArrayList 对象的多态性有什么好处?

我研究了多态性,了解到它可以像下面这样进行动态方法绑定(bind)。假设类Animal是抽象类。publicclassAnimalReference{publicstaticvoidmain(Stringargs[])Animalref//setupvarforanAnimalCowaCow=newCow("Bossy");//makesspecificobjectsDogaDog=newDog("Rover");//nowreferenceeachasanAnimalref=aCow;ref.speak();ref=aDog;ref.speak();}我曾经像这样创建ArrayLis