您好,欢迎访问一九零五行业门户网

java如何使用HashMap存取键值映射关系

使用hashmap存取键值映射关系简单来说,hashmap由数组和链表组成的,数组是hashmap的主体,链表则是主要为了解决哈希冲突而存在的。如果定位到的数组位置不含链表,那么查找、添加等操作很快,仅需一次寻址即可,其时间复杂度为o(1);如果定位到的数组包含链表,对于添加操作,其时间复杂度为o(n)——首先遍历链表,存在即覆盖,不存在则新增;对于查找操作来讲,仍需要遍历链表,然后通过key对象的equals方法逐一对比查找。从性能上考虑,hashmap中的链表出现越少,即哈希冲突越少,性能也就越好。所以,在日常编码中,可以使用hashmap存取键值映射关系。
案例:给定菜单记录列表,每条菜单记录中包含父菜单标识(根菜单的父菜单标识为null),构建出整个菜单树。
/** 菜单do类 */@setter@getter@tostringpublic static class menudo {    /** 菜单标识 */    private long id;    /** 菜单父标识 */    private long parentid;    /** 菜单名称 */    private string name;    /** 菜单链接 */    private string url;}/** 菜单vo类 */@setter@getter@tostringpublic static class menuvo {    /** 菜单标识 */    private long id;    /** 菜单名称 */    private string name;    /** 菜单链接 */    private string url;    /** 子菜单列表 */    private list<menuvo> childlist;}/** 构建菜单树函数 */public static list<menuvo> buildmenutree(list<menudo> menulist) {    // 检查列表为空    if (collectionutils.isempty(menulist)) {        return collections.emptylist();    }    // 依次处理菜单    int menusize = menulist.size();    list<menuvo> rootlist = new arraylist<>(menusize);    map<long, menuvo> menumap = new hashmap<>(menusize);    for (menudo menudo : menulist) {        // 赋值菜单对象        long menuid = menudo.getid();        menuvo menu = menumap.get(menuid);        if (objects.isnull(menu)) {            menu = new menuvo();            menu.setchildlist(new arraylist<>());            menumap.put(menuid, menu);        }        menu.setid(menudo.getid());        menu.setname(menudo.getname());        menu.seturl(menudo.geturl());        // 根据父标识处理        long parentid = menudo.getparentid();        if (objects.nonnull(parentid)) {            // 构建父菜单对象            menuvo parentmenu = menumap.get(parentid);            if (objects.isnull(parentmenu)) {                parentmenu = new menuvo();                parentmenu.setid(parentid);                parentmenu.setchildlist(new arraylist<>());                menumap.put(parentid, parentmenu);            }                        // 添加子菜单对象            parentmenu.getchildlist().add(menu);        } else {            // 添加根菜单对象            rootlist.add(menu);        }    }    // 返回根菜单列表    return rootlist;}
以上就是java如何使用hashmap存取键值映射关系的详细内容。
其它类似信息

推荐信息