Java数据结构

Java数据结构,java,collections,map,guava,Java,Collections,Map,Guava,我需要一些数据结构,我可以建立从标准集合或使用番石榴。所以它应该是可变的Map。其中V是非常有趣的结构 V要求: 易变的 按比较器排序(允许元素如compare(a,b)==0)——这是迭代的需要 设置(不存在a和b,即a.equals(b)=true)-可选 映射的额外可选要求 键应该按其自然顺序进行迭代 现在是HashMap,代码中有不同的内容,如collections.sort() 谢谢。您需要一个集合实现V,它是这样使用的:HashMap。上述要求影响V(非实体)。对吧? 我认为

我需要一些数据结构,我可以建立从标准集合或使用番石榴。所以它应该是可变的
Map
。其中
V
是非常有趣的结构

V
要求:

  • 易变的
  • 按比较器排序(允许元素如compare(a,b)==0)——这是迭代的需要
  • 设置(不存在
    a
    b
    ,即
    a.equals(b)=true
    )-可选
映射的额外可选要求

  • 键应该按其自然顺序进行迭代
现在是
HashMap
,代码中有不同的内容,如
collections.sort()


谢谢。

您需要一个集合实现V,它是这样使用的:HashMap。上述要求影响V(非实体)。对吧?

我认为a应该满足你的要求:

  • TreeSet实现Set接口
  • 按自然顺序或自定义比较器排序
  • 可以添加和删除元素
您可以使用一个而不是当前的
HashMap
<代码>枚举映射s对于枚举键更有效。在番石榴中检查[]。

一个示例实现 以下是所需类的实现:

第一个缺点是:它必须驻留在包
com.google.common.collect
中。番石榴的制造商们以他们无限的智慧制作了
AbstractSortedSetMultimap
包装范围

我将在所有示例中使用此
enum

public enum Color{
    RED, BLUE, GREEN
};
构建课堂 共有六名施工人员:

  • 空(对值使用
    HashMap
    和自然排序)

  • 使用
    Map
    (如果要对键进行排序,请使用此选项,传入
    SortedMap
    实现)

  • 使用
    比较器
    (与上面相同,但使用自定义比较器对值进行排序)


    如果一个额外的类太多,您可能希望使用该类的工厂方法

    SortedSetMultimap集=Multimaps.newSortedSetMultimap(
    新建HashMap(),
    新供应商(){
    @凌驾
    公共树集get(){
    返回新树集(新比较器(){
    @凌驾
    公共整数比较(实体o1、实体o2){
    //待办事项实施
    }
    });
    }
    });
    
    是的。我首先用它实现了它),但是TreeSet不能包含
    compare(a,b)==0
    这样的元素。非常感谢。也许,我会用它。在回答这个问题之后,如果Kewin改变AbstractSortedSetMultimap的范围,那就太完美了)我想他们最终会的。我的猜测是,他们还没有致力于API,所以他们只公开实现类。@S.P.Floyd-seanizer,我希望是这样。@Stas:如果他们不改变范围,你可以在你的项目中创建一个名为“com.google.common.collect”的包并添加类。我尝试过,它对我有效。@S.P.Floyd-seanizer,你做了一件大事。谢谢你)
    EnumMap
    是个好主意(+1),但问题是它不允许空构造函数。enum类是必需的。非常好的总结。
    SortedSetMultimap<Color,String> simple = 
        new EnumValueSortMultiMap<Color, String>();
    
    SortedSetMultimap<Color,String> inreverse =
        new EnumValueSortMultiMap<Color, String>(
            Ordering.natural().reverse()
        );
    
    SortedSetMultimap<Color,String> withSortedKeys = 
        new EnumValueSortMultiMap<Color, String>(
            new TreeMap<Color, Collection<String>>()
        );
    
    SortedSetMultimap<Color,String> reverseWithSortedKeys = 
        new EnumValueSortMultiMap<Color, String>(
            new TreeMap<Color, Collection<String>>(),
            Ordering.natural().reverse()
        );
    
    SortedSetMultimap<Color,String> withEnumMap =
        new EnumValueSortMultiMap<Color, String>(
            Color.class
        );
    
    SortedSetMultimap<Color,String> reverseWithEnumMap =
        new EnumValueSortMultiMap<Color, String>(
            Color.class, Ordering.natural().reverse()
        );
    
    package com.google.common.collect;
    
    import java.util.Collection;
    import java.util.Comparator;
    import java.util.EnumMap;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.SortedSet;
    import java.util.TreeSet;
    
    public class EnumValueSortMultiMap<K extends Enum<K>,
        V extends Comparable<? super V>>
        extends AbstractSortedSetMultimap<K, V>{
    
        private static final long serialVersionUID = 5359491222446743952L;
    
        private Comparator<? super V> comparator;
        private Class<K> enumType;
    
        public EnumValueSortMultiMap(){
            this(new HashMap<K, Collection<V>>());
        }
    
        public EnumValueSortMultiMap(final Comparator<? super V> comparator){
            this(new HashMap<K, Collection<V>>(), comparator);
        }
    
        public EnumValueSortMultiMap(final Map<K, Collection<V>> map){
            this(map, Ordering.natural());
        }
    
        public EnumValueSortMultiMap(final Map<K, Collection<V>> map,
            final Comparator<? super V> comparator){
            super(map);
            this.comparator = comparator;
        }
    
        public EnumValueSortMultiMap(final Class<K> enumClass,
            final Comparator<? super V> comparator){
            this(new EnumMap<K, Collection<V>>(enumClass), comparator);
        }
    
        public EnumValueSortMultiMap(final Class<K> enumClass){
            this(new EnumMap<K, Collection<V>>(enumClass));
        }
    
        @Override
        Map<K, Collection<V>> backingMap(){
            return new EnumMap<K, Collection<V>>(enumType);
        }
    
        @Override
        public Comparator<? super V> valueComparator(){
            return comparator;
        }
    
        @Override
        SortedSet<V> createCollection(){
            return new TreeSet<V>(comparator);
        }
    
    }
    
    public static <E extends Enum<E>, V> Multimap<E, V> getMap(
        final Class<E> clz){
    
        return Multimaps.newListMultimap(
            Maps.<E, Collection<V>> newEnumMap(clz),
            new Supplier<List<V>>(){
                @Override
                public List<V> get(){
                    return new SortedArrayList<V>();
                }
            }
        );
    }
    
    SortedSetMultimap<Color, Entity> set = Multimaps.newSortedSetMultimap(
        new HashMap<Enum, Collection<Entity>>(), 
        new Supplier<TreeSet<Entity>>() {
            @Override
            public TreeSet<Entity> get() {
                return new TreeSet<Entity>(new Comparator<Entity>() {
                    @Override
                    public int compare(Entity o1, Entity o2) {
                        //TODO implement
                    }
                });
            }
    });