像Java地图一样快的Java列表?
我想找到一个简化的Java映射或列表,其中我不关心values集合中的实际值,只关心:像Java地图一样快的Java列表?,java,performance,list,map,Java,Performance,List,Map,我想找到一个简化的Java映射或列表,其中我不关心values集合中的实际值,只关心: boolean containsKey(Object key): if the key exists void remove(Object key): remove the entry of the key 一方面,我希望只使用键集(如Java列表)来节省内存,另一方面,我希望在O(1)时间内运行以上两个方法。秩序也不受关注。那么这在Java中是可能的吗?谢谢请使用手机。这将只有一个值列表,而不是像Map那
boolean containsKey(Object key): if the key exists
void remove(Object key): remove the entry of the key
一方面,我希望只使用键集(如Java列表)来节省内存,另一方面,我希望在O(1)时间内运行以上两个方法。秩序也不受关注。那么这在Java中是可能的吗?谢谢请使用手机。这将只有一个值列表,而不是像Map
那样的键值对
假设散列函数将元素正确地分散在存储桶中,则该类为基本操作(添加、删除、包含和大小)提供恒定的时间性能
快速搜索显示:
使用一个。这将只有一个值列表,而不是像Map
那样的键值对
假设散列函数将元素正确地分散在存储桶中,则该类为基本操作(添加、删除、包含和大小)提供恒定的时间性能
快速搜索显示:
您可以使用
LinkedHashSet
进行此操作。如果您需要一个简单的界面,您可以提供一个新的界面:
interface SimpleSet{
boolean containsKey(Object key);
boolean remove(Object key);
}
class MySimpleSet extends LinkedHashSet implements SimpleSet{
//... necessary contructors ...
@Override
public boolean containsKey(Object key) {
return contains(key);
}
}
并声明如下:
SimpleSet set = new MySimpleSet();
内存消耗更新
LinkedHashSet
每个存储元素占用约40-50字节。因此,如果它太多,您可以考虑或从ToWe4J中考虑ToLekdHasSt/<代码>,这是本文所判断的每个元素的4-8字节:< P>。如果您需要一个简单的界面,您可以提供一个新的界面:
interface SimpleSet{
boolean containsKey(Object key);
boolean remove(Object key);
}
class MySimpleSet extends LinkedHashSet implements SimpleSet{
//... necessary contructors ...
@Override
public boolean containsKey(Object key) {
return contains(key);
}
}
并声明如下:
SimpleSet set = new MySimpleSet();
内存消耗更新
LinkedHashSet
每个存储元素占用约40-50字节。因此,如果它太多,你可以考虑或从ToWe4J考虑代码或< TLIKEDHASSET/<代码>,这篇文章判断的元素为4-8字节:可能是一个有序集合(或者仅仅是如果你不关心订单),你寻找的是什么?<代码> HasSET 似乎是你正在寻找的集合。@泰勒,是的,订单没有关系。我想用谷歌搜索OrderedSet,从来没有听说过though@Jun然后使用HashSet,正如Jeroen解释的那样below@JunHashSet
在内部使用HashMap
它将占用相似的内存量,而且包含的和删除的都是O(1)。可能是一个OrderedSet(或者如果您不关心顺序,只需设置)是您要找的吗?HashSet
似乎就是您要找的集合。@Taylor是的,顺序无关紧要。我想用谷歌搜索OrderedSet,从来没有听说过though@Jun然后使用HashSet,正如Jeroen解释的那样below@JunHashSet
在内部使用HashMap
它将占用相似的内存量,而且包含的和删除的都是O(1)。请注意,Set
在幕后使用Map
来实现这一点HashSet
使用HashMap
,LinkedHashSet
使用LinkedHashMap
和TreeSet
使用TreeMap
。因此,从这个问题来看:一方面,我想通过只使用键集(如Java列表)来节省内存,另一方面,我想在O(1)时间内运行以上两个方法,最好使用Map
来代替。这取决于他的需要,我无法真正理解他想要做什么。如果他有一个键值对,那么他应该使用HashMap
,如果只是键,那么他应该使用HashSet
。这一点已经被注意到了。请注意,Set
在幕后使用Map
来实现这一点HashSet
使用HashMap
,LinkedHashSet
使用LinkedHashMap
和TreeSet
使用TreeMap
。因此,从这个问题来看:一方面,我想通过只使用键集(如Java列表)来节省内存,另一方面,我想在O(1)时间内运行以上两个方法,最好使用Map
来代替。这取决于他的需要,我无法真正理解他想要做什么。如果他有一个键值对,那么他应该取一个HashMap
,如果只是键,那么他应该取一个HashSet
。