Heim >Java >javaLernprogramm >So verwenden Sie HashMap für den Zugriff auf Schlüssel-Wert-Zuordnungsbeziehungen in Java

So verwenden Sie HashMap für den Zugriff auf Schlüssel-Wert-Zuordnungsbeziehungen in Java

WBOY
WBOYnach vorne
2023-05-10 11:02:141271Durchsuche

Verwenden Sie HashMap, um auf Schlüsselwert-Zuordnungsbeziehungen zuzugreifen. Vereinfacht gesagt besteht HashMap aus Arrays und verknüpften Listen. Arrays sind der Hauptteil von HashMap, und verknüpfte Listen dienen hauptsächlich der Lösung von Hash-Konflikten. Wenn die gefundene Array-Position keine verknüpfte Liste enthält, sind Such-, Additions- und andere Operationen sehr schnell und erfordern nur eine Adressierung. Die Zeitkomplexität beträgt O(1), wenn das lokalisierte Array eine verknüpfte Liste enthält Die Zeitkomplexität beträgt O(1). Durchlaufen Sie zuerst die verknüpfte Liste, überschreiben Sie sie, wenn sie nicht vorhanden ist, und fügen Sie sie für den Suchvorgang hinzu Verknüpfte Liste, dann vergleichen und durchsuchen Sie nacheinander die Methode equal des Schlüsselobjekts. Aus Leistungssicht ist die Leistung umso besser, je weniger verknüpfte Listen in HashMap vorhanden sind, dh je weniger Hash-Konflikte vorhanden sind. Daher können Sie bei der täglichen Codierung HashMap verwenden, um auf Schlüsselwert-Zuordnungsbeziehungen zuzugreifen.

Fall: Bei einer gegebenen Liste von Menüdatensätzen enthält jeder Menüdatensatz die Kennung des übergeordneten Menüs (die Kennung des übergeordneten Menüs des Stammmenüs ist null), und der gesamte Menübaum wird erstellt.

/** 菜单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;
}

Das obige ist der detaillierte Inhalt vonSo verwenden Sie HashMap für den Zugriff auf Schlüssel-Wert-Zuordnungsbeziehungen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen