与RangeMap数据结构相反

时间:2015-10-08 11:00:51

标签: java data-structures

我正在寻找允许以下操作的Java数据结构S<K extends Comparable<?>, V>

  • put(K key, V value)将一个值(例如三件商品)添加到一个键( 10月第一个
  • Collection<V> get(Range<K> range)意思告诉我8月到11月之间售出的所有物品

我想我可以滥用SortedMap<K, V>,但也许你们知道一个更好的选择。

示例实例化将new MyDataStructure<Instant, Integer>来描述在不同日期销售的股票。

2 个答案:

答案 0 :(得分:1)

示例回答我理解的内容,Map内的对象可以调整。

1。)可扩展的并发ConcurrentNavigableMap实现。地图根据其键的自然顺序排序,或者根据地图创建时提供的Comparator进行排序,具体取决于使用的构造函数。

2。)subMap(K fromKey,boolean fromInclusive,K toKey,boolean toInclusive)

SubMap将根据给定日期创建地图,无论是否包含它们。

public static void main(String[] args) throws ParseException {
        ConcurrentSkipListMap<Date, Integer> myMap = new ConcurrentSkipListMap<Date, Integer>();

        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, -7);
        Date myDate1 = cal.getTime();
        System.out.println("Date1 = "+myDate1);
        myMap.put(myDate1, 10);

        Calendar cal1 = Calendar.getInstance();
        cal1.add(Calendar.DATE, -4);
        Date myDate2 = cal1.getTime();
        System.out.println("Date2 = "+myDate2);
        myMap.put(myDate2, 5);

        Date myDate3 = new Date();
        System.out.println("Date 3 "+ myDate3);
        myMap.put(myDate3, 2);

        SortedMap<Date, Integer> outputMap = myMap.subMap(myDate1, true,myDate3, false);
        System.out.println("Output Map from "+myDate1 +" to "+myDate2 + "is = "+outputMap);

    }

<强>输出

Date1 = Thu Oct 01 16:48:48 IST 2015
Date2 = Sun Oct 04 16:48:48 IST 2015
Date 3 Thu Oct 08 16:48:48 IST 2015
Output Map from Thu Oct 01 16:48:48 IST 2015 to Sun Oct 04 16:48:48 IST 2015is = {Thu Oct 01 16:48:48 IST 2015=10, Sun Oct 04 16:48:48 IST 2015=5}

答案 1 :(得分:0)

你可以使用嵌套地图。

map<Object,map<object,object>>. 

此结构适合您的情况如下

map<monthnameobject,map<itemcode(or sequence),itemvalue>>