University of Toronto - Fall 2000
Department of Computer Science

Week 9 - Vector of Vectors

A Vector is an object, so you can store it in another Vector. Or you can store an object that has a Vector as its instance variable in a Vector which is an instance variable of an object.

import java.util.*;
class Student {
        private String name;   // Student's name
        private Vector marks = new Vector();

        public Student (String n) {
            name = n;
        }

        public void addMark (int i) {
                marks.addElement (new Integer(i));
        }

        public String getName () {
                return name;
        }

        public double getAverage() {
                int sum = 0;
                Enumeration e = marks.elements();
                while (e.hasMoreElements()) {
                        sum += ((Integer)e.nextElement()).intValue();
                }
                return (double)sum/marks.size();
        }
}

class Course {
        private String name;    // Course's name
        private Vector students = new Vector();

        public Course (String n) {
            name = n;
        }

        public void addStudent (Student s) {
                students.addElement(s);
        }

        public String getName () {
                return name;
        }

        public void printMarks() {
                Enumeration e = students.elements();
                while (e.hasMoreElements()) {
                        Student s = (Student)e.nextElement();
                        System.out.println (s.getName() + " " + s.getAverage());
                }
        }
}

class School {
    public static void main (String[] args) {
        Student lia = new Student ("Lia");
        Student sam = new Student ("Sam");
        lia.addMark (87);
        lia.addMark (93);
        sam.addMark (60);
        sam.addMark (75);

        Student ann = new Student ("Ann");
        Student jim = new Student ("Jim");
        ann.addMark (70);
        ann.addMark (65);
        jim.addMark (85);
        jim.addMark (91);

        Course csc108 = new Course ("CSC108");
        csc108.addStudent (lia);
        csc108.addStudent (sam);

        Course csc148 = new Course ("CSC148");
        csc148.addStudent (ann);
        csc148.addStudent (jim);

        System.out.println ("CSC108 Marks:");
        csc108.printMarks();

        System.out.println ("\nCSC148 Marks:");
        csc148.printMarks();
    }
}

We have a Vector of Students, with each Student containing a Vector of marks. Of course, the nested Vector of marks is "shielded" from the containing Vector by being a member of a protective Student class, but that's not necessary. You can just put a Vector into an element of another Vector if it seems appropriate.

Program Output

CSC108 Marks:
Lia 90.0
Sam 67.5

CSC148 Marks:
Ann 67.5
Jim 88.0

Memory Model Diagram