栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java集合构建成树形集合TreeUtil

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java集合构建成树形集合TreeUtil

定义树形结构接口
import java.util.List;


public interface baseTree {

    String getId();

    void setId(String id);

    String getPid();

    void setPid(String pid);

    List getChildren();

    void setChildren(List children);
}
模板方法+泛型进行封装的树形结构工具类
package com.zm.decorator;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public abstract class TreeUtil, N> {

    
    protected abstract N getId(T t);

    
    protected abstract N getPid(T t);

    
    public List parseTree(List list) {
        if(list.isEmpty()){
            return list;
        }
        List resultList = new ArrayList<>();
        // 知道有多少个元素,那么在创建的时候直接指定长度,避免因扩容而浪费时间
        Map tmpMap = new HashMap<>(list.size());
        for (T t : list) {
            tmpMap.put(this.getId(t), t);
        }
        for (T t : list) {
              
            T tmap = tmpMap.get(this.getPid(t));
            if (tmap != null) {
                if (null == tmap.getChildren()) {
                    tmap.setChildren(new ArrayList<>());
                }
                tmap.getChildren().add(t);
            } else {
                resultList.add(t);
            }
        }
        // 如果集合中存储了大量的元素,并且集合已经使用完毕,那么尽量调用clear方法来及时的释放空间。
        // 如果集合不会重复使用,那么将集合也设置为null将内存一并释放。这样有助于gc能更快完成清除内存的工作。
        list.clear();
        list = null;
        return resultList;
    }
}

使用
import java.util.List;

public class TestNode implements baseTree{

    private List children;

    private String id;

    private String pid;

    private String name;

    @Override
    public List getChildren() {
        return children;
    }

    @Override
    public void setChildren(List children) {
        this.children = children;
    }

    @Override
    public String getId() {
        return id;
    }

    @Override
    public void setId(String id) {
        this.id = id;
    }

    @Override
    public String getPid() {
        return pid;
    }

    @Override
    public void setPid(String pid) {
        this.pid = pid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

  public static void main(String[] args) {
        ArrayList objects = getTestNodes();
        test1(objects);
    }

    private static void test1(ArrayList objects) {

        TreeUtil treeUtil = new TreeUtil() {
            @Override
            protected String getId(TestNode e) {
                return e.getId();
            }

            @Override
            protected String getPid(TestNode e) {
                return e.getPid();
            }
        };

        List testNodes = treeUtil.parseTree(objects);
        System.out.println(testNodes);

    }

    private static ArrayList getTestNodes() {
        TestNode testNode1 = new TestNode();
        testNode1.setName("中国");
        testNode1.setId("0");

        TestNode testNode2 = new TestNode();
        testNode2.setName("福建省");
        testNode2.setId("1");
        testNode2.setPid("0");

        TestNode testNode3 = new TestNode();
        testNode3.setName("浙江省");
        testNode3.setId("2");
        testNode3.setPid("0");

        TestNode testNode4 = new TestNode();
        testNode4.setName("福州市");
        testNode4.setId("3");
        testNode4.setPid("1");


        TestNode testNode5 = new TestNode();
        testNode5.setName("宁德市");
        testNode5.setId("4");
        testNode5.setPid("1");


        ArrayList objects = new ArrayList<>();
        objects.add(testNode1);
        objects.add(testNode2);
        objects.add(testNode3);
        objects.add(testNode4);
        objects.add(testNode5);
        return objects;
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762896.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号