如何在java中实现轮胎图?

如何在java中实现轮胎图?,java,performance,map,b-tree,tire,Java,Performance,Map,B Tree,Tire,我想要一张像blow这样的轮胎图: 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"] //

我想要一张像blow这样的轮胎图:

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
Map Map=new TireMap();
map.put(“com”、“1”);
map.put(“com.aa”,“2”);
map.put(“com.aa.bb”,“3”);
map.get(“com”);//返回[“1”、“2”、“3”]
map.get(“com.a”)//返回[“2”、“3”]
map.get(“com.aa”)//返回[“2”、“3”]

//密钥可能是完整密钥,也可能只是密钥前缀
如何实现这样的映射?或者Java API或开源中已经存在映射

这很像mysql中的innodb


PS:
性能
非常重要。存储项将超过1000W。

以下是我为解决此问题而实施的措施,但我不确定性能,这需要了解

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"));`
 }
类TireMap扩展了HashMap{
@凌驾
公共对象获取(对象密钥){
//TODO自动生成的方法存根
List listOfObejcts=new ArrayList();
字符串键字符串=(字符串)键;
对于(字符串s:this.keySet()){
如果(s.StartWith(钥匙串))
listOfObejcts.add(super.get(s));
}
返回bejcts列表;
}
}
公开课考试
{
公共静态void main(字符串参数[]){
Map Map=新的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”]
。请检查此项。

我将从java.util中试用
树映射。这是一个满足您需要的映射。它根据自然顺序管理键(由键类中的
比较器定义).方法
tailMap
headMap
为您提供了一个包含所需钥匙的地图

范例

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());
}
publicstaticvoidmain(字符串[]args){
TreeMap map=newtreemap();
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”);//返回[“2”,“3”]
System.out.println(map.tailMap(“com.aa”).values());
}

java中最常用的map实现是hashmap或TreeMap(性能取决于您对map所做的操作(添加数据、读取、是需要排序的数据等)),如果可以的话,只需进行其他操作,就可以直接实现map(不要扩展HashMap,因为您扩展了所有方法,只需重新指定在实现中定义的方法

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

Map<String,Object> map = new TreeMap(); 
Map Map=newtreemap();
如果你想改变实现,你只需要做你想做的事情,谁来实现地图,谁来改变你的代码$

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

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

你对层数有限制吗?@peeyus limit和unlimit都可以。如果有限制,则限制数可以更改。密钥可能是完整密钥,也可能只是密钥前缀。
不是密钥的分隔符r、 实际上不需要拆分,我没有使用它。所以编辑了答案。每次调用
public Object get(Object key)
,它将迭代所有键,因此您的方法的性能不是很好?根据问题中给出的以及我的回答中提到的,映射的键不是任何
对象
,而是它的
字符串
对象