5

我想要一个像吹一样的轮胎图:

Map<String,Object> map = new TireMap();
map.put("com","1");
map.put("com.aa","2");
map.put("com.aa.bb","3");

map.get("com");// return ["1","2","3"]
map.get("com.a"); //return ["2","3"]
map.get("com.aa"); //return ["2","3"]
// the key maybe full key or just key prefix

如何实现这样的地图?或者是否已经存在 Java API 或开源中的地图?

这很像innodb在mysql中。

PS: Performance很重要。存储物品将超过1000W。

4

3 回答 3

5

我会TreeMap从 java.util 中尝试。这是一张你需要的地图。它根据自然顺序(由comparator密钥类中的 a 定义)管理密钥。方法tailMapheadMap为您提供带有所需键的地图。

例子

public static void main(String[] args) {
    TreeMap<String, Object> map = new TreeMap<String, Object>();

    map.put("com","1");
    map.put("com.aa","2");
    map.put("com.aa.bb","3");

    System.out.println(map.get("com"));
    System.out.println(map.tailMap("com").values()); // ["1","2","3"]

    System.out.println(map.get("com.aa")); //return ["2","3"]
    System.out.println(map.tailMap("com.aa").values());
}
于 2013-05-13T05:59:32.543 回答
0

java中最常用的地图实现是hashmap或TreeMap(性能取决于你用地图制作的东西(添加数据,读取,是需要排序的数据,......)),如果没问题就让你有直接实现映射(不要扩展 HashMap 因为你扩展了所有方法,只需重新指定实现中定义的方法。

阅读文档以了解 java 中已经存在的 map 的更好实现,或者只是使用经典实现开始开发您的应用程序

Map<String,Object> map = new TreeMap(); 

如果您想更改实现,您只需制作您想要的实现地图的人并在 $ 中更改您的代码

Map<String,Object> map = new YourMapImplementation();

ps Joshi:小心点,在您的代码中,您的密钥是一个对象,不必具有可比性,如果他犯了错误,可能会提供一些错误

于 2013-05-13T06:04:30.823 回答
0

这是我为解决问题而实施的,但我不确定性能,需要找出来。

class TireMap extends HashMap<String, Object> {

@Override
public Object get(Object key) {
    // TODO Auto-generated method stub
    List<Object> listOfObejcts = new ArrayList<Object>();

    String keyString = (String) key;

    for(String s : this.keySet()){

        if(s.startsWith(keyString))
            listOfObejcts.add(super.get(s));
    }

    return listOfObejcts;
}
}


 public class Test 
 {
    public static void main(String args[]) {

    Map<String, Object> map = new TireMap();

    map.put("com", "1");
    map.put("com.aa", "2");
    map.put("com.bb", "3");


    System.out.println(map.get("com"));
    System.out.println(map.get("com.aa"));`
 }

这分别返回了我["1","2","3"]["2","3"]。请检查一下。

于 2013-05-13T05:53:34.623 回答