我有一个文本文件,其中分层数据在文本文件中的平面结构中可用。Java - 从文本文件中的平面结构读取分层数据并构建散列图
child parent
Y, X
Z, Y
A, Z
它像X是Y的父亲,它本身Z和Z的父亲是A的父亲。它可以以任何顺序出现在文件中。我需要构建一个hashmap,其中键应该是元素,值应该是所有祖先元素的列表。例如,HashMap应该具有基于上述数据的条目,如下所示:其中A = [Z,Y,X],Y = [X],Z = [Y,X]。
我已经在java中编写了一个代码来构建这个hashmap。只需要知道是否有更有效的方法来做到这一点。 逻辑是
- 阅读其中的孩子是关键,家长是价值
从上面创建递归遍历每个孩子和父母建立的名单HashMap中的散列映射整个文件。
public class Test { public static final String FILE_NAME = "dataset1"; public static final HashMap<String,String> inputMap = new HashMap<String,String>(); public static final Map<String, ArrayList<String>> parentChildMap = new HashMap<String,ArrayList<String>>(); private static void readTextFile(String aFileName) throws IOException { Path path = Paths.get(aFileName); try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)){ String line = null; while ((line = reader.readLine()) != null) { String[] dataArray = line.split(","); String child = dataArray[0]; String parent = dataArray[1]; inputMap.put(child, parent); } } } public static ArrayList<String> getParents(String childId, ArrayList<String> parents) { if (childId == null) return parents; String parentId = inputMap.get(childId); if(parentId!=null) parents.add(parentId); getParents(parentId, parents); return parents; } public static void main(String[] s) throws IOException { readTextFile(FILE_NAME); for(String child : inputMap.keySet()) { ArrayList<String> parents = getParents(child, new ArrayList<String>()); parentChildMap.put(child, parents); } }
Cana孩子有多个家长? – AJC
不,但父母可以有自己的父母和孩子需要他们所有人 – KBR