java有什么数据结构可以保存“一对多”关系的?

Python014

java有什么数据结构可以保存“一对多”关系的?,第1张

没有直接一个键对应多个值的,但是可以想一些办法。\x0d\x0a比如把指定键所对应的值用一个组合数据来表示。\x0d\x0aexample:\x0d\x0aimport java.util.Map\x0d\x0aimport java.util.HashMap\x0d\x0aimport java.util.ArrayList\x0d\x0a\x0d\x0apublic class Example {\x0d\x0a\x0d\x0aprivate static Map>map\x0d\x0aprivate static ArrayList teacherList\x0d\x0aprivate static ArrayList studentList\x0d\x0a\x0d\x0apublic static void main(String [] args) {\x0d\x0amap = new HashMap>()\x0d\x0ateacherList = new ArrayList()\x0d\x0astudentList = new ArrayList()\x0d\x0amap.put("teacher", teacherList)\x0d\x0amap.put("student", studentList)\x0d\x0ateacherList.add("张三")\x0d\x0ateacherList.add("李四")\x0d\x0astudentList.add("王五")\x0d\x0astudentList.add("赵六")\x0d\x0aSystem.out.println("教师姓名:" + map.get("teacher"))\x0d\x0aSystem.out.println("学生姓名:" + map.get("student"))\x0d\x0a}\x0d\x0a}

在Java中,依赖关系通常表示为一个类依赖于另一个类,因为它需要调用另一个类的方法或构造函数来完成它的工作。例如,假设我们有一个名为Car的类,它拥有一个名为startEngine的方法,用于启动汽车的发动机。我们还有一个名为Driver的类,它有一个名为drive的方法,用于驾驶汽车。那么Driver类就依赖于Car类,因为Driver类需要调用Car类的startEngine方法来启动汽车。

下面是一个示例代码,实现了一个依赖关系的场景:

=================

public class Car {

public void startEngine() {

System.out.println("Engine started.")

}

}

public class Driver {

private Car car

public Driver(Car car) {

this.car = car

}

public void drive() {

car.startEngine()

System.out.println("Car is being driven.")

}

}

public class Main {

public static void main(String[] args) {

Car car = new Car()

Driver driver = new Driver(car)

driver.drive()

}

}

=================

在这段代码中,Driver类的构造函数接收一个Car类的实例作为参数,并将它保存在私有字段car中。在Driver类的drive方法中,我们首先调用了car实例的startEngine方法,然后打印一条消息,表示汽车正在被驾驶。

关联关系通常表示为两个类之间的关系,它们之间的关系可能是一对一,一对多或多对多。例如,假设我们有一个名为Student的类,它有一个名为enroll的方法,用于选课。我们还有一个名为Course的类,它有一个名为addStudent的方法,用于添加学生。那么Student类和Course类之间就存在一对多的关联关系,因为一个学生可以选择多个课程,而一个课程也可以被多个学生选择。

下面是一个示例代码,实现了一个关联关系的场景:

=================

public class Student {

private List<Course>courses = new ArrayList<>()

public void enroll(Course course) {

courses.add(course)

course.addStudent(this)

}

}

public class Course {

private List<Student>students = new ArrayList<>()

public void addStudent(Student student) {

students.add(student)

}

}

public class Main {

public static void main(String[] args) {

Student student = new Student()

Course course1 = new Course()

Course course2 = new Course()

student.enroll(course1)

student.enroll(course2)

}

}

=================

在这段代码中,Student类拥有一个私有字段courses,表示学生选择的课程。Student类的enroll方法用于选课,它接收一个Course类的实例作为参数,并将它添加到courses列表中。同时,enroll方法还会调用课程实例的addStudent方法,将学生添加到课程的学生列表中。

在Main类的main方法中,我们创建了一个学生实例和两个课程实例。我们调用学生实例的enroll方法,将两个课程实例添加到学生的选课列表中,同时将学生添加到两个课程的学生列表中。这就实现了一对多的关联关系。

总之,依赖关系和关联关系都是表示两个类之间的关系,但是它们之间的关系不同。依赖关系表示一个类依赖于另一个类,因为它需要调用另一个类的方法或构造函数来完成它的工作;关联关系表示两个类之间的关系,它们之间可能是一对一,一对多或多对多。

1.数据库>>

1的实例作为主键表, N的实例作为外键表引用1的实例主键表示他们的关系

2. JavaBean>>

  a.主键表实例类, 基本属性即可, 如果需要从主键bean中找到外键bean, 需要在主键bean中声明泛型集合保存

b.外键表实例类

1). 基本属性

2). 主键表实例引用, 用于表明主外键关系

Code以QQ号与用户为例:  (QQ)N:1(用户)

/**

* QQ

*/

public class QQ{

    private String id

    private String password

    // 用户实例引用, 这里表示当前对象与哪个用户相关

    private User user

    

    // 此处省略getter和setter属性读取器...

}

/**

* 用户

*/

public class User{

    //   UUID算法, 防止数据库合并时导致主键列冲突问题

    private String id

    private String userName

    // 此处省略getter和setter属性读取器...

}

/**

* 模拟场景

*/

public static void main(String[] args){

    // 从数据库查询出QQ对象, 以及QQ对象所属的用户

    Object[] params = {}

    QQ qq = QQDao.getQQ(params)

    

    // 获取当前QQ的用户信息

    User user = QQ.getUser()

    String id = user.getId()

    

    //...

}

完全手打, 如果有什么不明白的欢迎追问^^

希望能帮助你