gpt4 book ai didi

java - 如何在二叉搜索树java中逐行保存和加载对象

转载 作者:太空宇宙 更新时间:2023-11-04 11:10:47 25 4
gpt4 key购买 nike

将所有员工从树保存到文件,然后在运行程序时加载它时遇到问题。我不知道是否可以将对象的所有数据从树保存到文件并再次将其加载到树中。我已经尝试过这样的保存功能,我的 txt 输出文件包含所有产品,例如。如果有的话可以从我的 txt 输出文件创建二叉树。

1-Jack-0901494996
2-Maria-194889201

写入文件函数

public void write(PrintStream output) {
write(root, "", output);

}

private void write(Node root, String code, PrintStream output) {
if(root != null) {
if(root.left == null && root.right == null) {
write(root.left, code, output);
write(root.right, code, output);

}
output.println(root.getData() + "\n");
write(root.left, code, output);
write(root.right, code, output);
// recursive-case

}
}

以及我如何调用它

  BST bst = new BST();
PrintStream output = new PrintStream(new File("D:/emp1.txt"));
bst.write(output);

我的 BST 类(class)

  class BST
{

private Node root;
public BST()
{
root = null;
}

public void insert(Employee emp)
{
root = insert(root, emp);
}

private Node insert(Node node, Employee emp)
{
if (node == null)
node = new Node(emp);
else
{
if (emp.getccode() <= node.getccode())
node.left = insert(node.left, emp);
else
node.right = insert(node.right, emp);
}
return node;
}
}

还有我的简单类(class)员工

class Employee implements Comparable<Employee>, Serializable{

private static final long serialVersionUID = 1L;

int ccode;
String cus_name;
String phone;


@Override
public String toString() {
return ccode + "-" + cus_name + "-" + phone + "|";
}


}

最佳答案

所以唯一缺少的就是将 txt 文件中的数据解析为 BST。由于您已经实现了插入功能,因此您需要做的就是逐行读取文档并将其转换为 Employee 对象,如下所示:

public static void main(String[] args) {
List<Employee> employees = read("employees.txt");

BST bst = new BST();
for(Employee e : employees){
bst.insert(e);
}

}

public static List<Employee> read(String file) {
try {
List<Employee> employees = new ArrayList<>();

BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
while((line = reader.readLine()) != null ){
String[] arr = line.split("-");
Employee emp = new Employee();
emp.ccode = Integer.parseInt(arr[0]);
emp.cus_name = arr[1];
emp.phone = arr[2];
employees.add(emp);
}
return employees;
} catch (IOException ex) {
Logger.getLogger(TestMusic.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}

关于java - 如何在二叉搜索树java中逐行保存和加载对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46027301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com