Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
像Java地图一样快的Java列表?_Java_Performance_List_Map - Fatal编程技术网

像Java地图一样快的Java列表?

像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那

我想找到一个简化的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
那样的键值对

假设散列函数将元素正确地分散在存储桶中,则该类为基本操作(添加、删除、包含和大小)提供恒定的时间性能

快速搜索显示:

使用一个。这将只有一个值列表,而不是像
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@Jun
HashSet
在内部使用
HashMap
它将占用相似的内存量,而且
包含的
删除的
都是O(1)。可能是一个OrderedSet(或者如果您不关心顺序,只需设置)是您要找的吗?
HashSet
似乎就是您要找的集合。@Taylor是的,顺序无关紧要。我想用谷歌搜索OrderedSet,从来没有听说过though@Jun然后使用HashSet,正如Jeroen解释的那样below@Jun
HashSet
在内部使用
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