Tag: 集合

Java Collections Framework中常见方法(大小)的意外复杂性?

最近,我对一些Java集合没有方法size()的常量时间操作感到惊讶。 虽然我了解到集合的并发实现作为并发增益(在ConcurrentLinkedQueue,ConcurrentSkipListSet,LinkedTransferQueue等中的大小为O(n))的折衷作出了一些妥协,但好消息是这在API文档中有适当的记录。 关注我的是一些集合的方法返回的视图的方法大小的性能。 例如, TreeSet.tailSet返回其元素大于或等于fromElement的支持集部分的视图。 令我惊讶的是,返回的SortedSet上的调用大小在时间上是线性的,即O(n)。 至少这是我设法从OpenJDK的源代码中挖掘出来的:在TreeSet中实现为TreeMap的包装器,在TreeMap中,有一个EntrySetView类,其size方法如下: abstract class EntrySetView extends AbstractSet<Map.Entry> { private transient int size = -1, sizeModCount; public int size() { if (fromStart && toEnd) return m.size(); if (size == -1 || sizeModCount != m.modCount) { sizeModCount = m.modCount; size = 0; Iterator i = iterator(); while (i.hasNext()) { size++; i.next(); } […]

从对象列表Java 8获取具有max date属性的对象

我有一个名为Contact的类,它有一个Date lastUpdated; 变量。 我想从具有max lastUpdated变量的List中拉出Contact 。 我知道这可以通过编写自定义比较器并使用Collections.max来完成,但我想知道是否有一种方法可以在Java 8中完成,不需要使用自定义比较器,因为我只想拉一个在我的代码中只有一个位置的最大日期,并且Contact类不应该总是使用lastUpdated变量来比较实例。

性能:从HashMap.values()创建一个ArrayList

问题是从HashMap.values()集合创建ArrayList的成本是多少? 或者单独创建值Collection? 假设Map.size()> 100k。 对象也可以一直保存在ArrayList(而不是HashMap)中,这对其他部分有影响(元素的修改,易于按键)。 ArrayList用于迭代每个第n个元素。 (这就是为什么不能直接使用值集合)。 在迭代期间不进行任何修改。

Java int 数组到HashSet

我有一个int数组: int[] a = {1, 2, 3}; 我需要一个类型集: Set s; 如果我执行以下操作: s = new HashSet(Arrays.asList(a)); 当然,它认为我的意思是: List 而我的意思是: List 这是因为int是原始的。 如果我使用了String,那么一切都会起作用: Set s = new HashSet( Arrays.asList(new String[] { “1”, “2”, “3” })); 如何轻松,正确,简洁地从: A) int[] a… 至 B) Integer[] a … 谢谢!

为什么通用列表声明的区别?

我想要两个列表:第一个是整数列表。 我认为它是: List ints= Arrays.asList(1,2,3); 它工作正常。 第二个是对象列表。 我声明为: List objs= Arrays.asList(1,2.13,”three”); 但是一旦我写它就会在eclipse中出错。 错误是: Multiple markers at this line – Type mismatch: cannot convert from List<Object&Comparable&Serializable> to List – Type safety: A generic array of Object&Comparable&Serializable is created for a varargs parameter 相反,如果我写 List objs = Arrays.asList(1,2.13,”three”); 它工作正常。 我无法弄清楚原因。

Hashtable和Dictionary之间有什么区别?

Dictionary和Hashtable之间有什么区别,我如何使用Java中的Dictionary类?

将保持插入顺序且没有重复的集合

在Java集合中哪个集合不允许重复并且还保留数据的插入顺序?

如何检查一组项目中是否存在元素?

在Java中的if语句中,如何检查对象是否存在于一组项中。 例如,在这种情况下,我需要validation水果将是苹果,橙子或香蕉。 if (fruitname in [“APPLE”, “ORANGES”, “GRAPES”]) { //Do something } 这是一个非常微不足道的事情,但我无法找到一个简短而简洁的方法来实现这一目标。

查询内存中的集合

我有一个集合,一个Map的Map,地图是Map 。 我需要用比较来查询这个集合,逻辑,比如,不在运算符中。 像SQL这样的东西。 我将从数据库存储过程填充列表,所以我不确定大小。 但是,我猜大小不应超过10,000条记录。 在发布这篇文章的时候我会看一下Apache functor,我不知道他们是否会在这里提供帮助。 我想到的其他方式是使用内存数据库Derby来实现这一点。 请让我知道任何Java库或任何其他方式。 列表中的地图如下所示: Map m1 = new Map(); m1.put(“name”,”Mark”); m1.put(“age”,”21″); m1.put(“city”,”some city”); Map m1 = new Map(); m1.put(“name”,”David”); m1.put(“age”,”25″); m1.put(“city”,”other city”); 我需要查询列表以获取具有以下内容的Map: name=Mark name=Mark and age > 30 city not in “other city”

Java:设置接口和Collection接口的差异

我只是查看了Set界面,发现它主要(或完全)只重新声明已经在Collection接口中的函数。 Set自己扩展Collection ,那么这是不是意味着Set界面自动拥有Collection所有function? 那么他们为什么要重新申报呢? 例如, Set redeclares this: /** * Returns the number of elements in this set (its cardinality). If this * set contains more than Integer.MAX_VALUE elements, returns * Integer.MAX_VALUE. * * @return the number of elements in this set (its cardinality) */ int size(); /** * Returns true if this set contains […]