首頁 > Java > java教程 > java如何使用HashMap存取鍵值映射關係

java如何使用HashMap存取鍵值映射關係

WBOY
發布: 2023-05-10 11:02:14
轉載
1270 人瀏覽過

使用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存取鍵值映射關係的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板