Utkarsh Atri
Utkarsh Atri

Reputation: 67

How to link elements of two linked list in java?

This is my starting code for a van rental database.

List<String> manual = new LinkedList<>();
List<String> automatic = new LinkedList<>();
List<String> location = new LinkedList<>();

manual.add("Queen");
manual.add("Purple");
manual.add("Hendrix");

automatic.add("Wicked");
automatic.add("Zeppelin");
automatic.add("Floyd");
automatic.add("Ramones");
automatic.add("Nirvana");

location.add("CBD");
location.add("Penrith");
location.add("Ceremorne");
location.add("Sutherland");

How can I link the cars to the location. For example, location CBD has Wicked,Zepplin and Floyd, and Penrith has Queen. So if the command line arguement has "Print CBD" then it must show the vans available in CBD.

Any help will be appreciated.

Upvotes: 0

Views: 820

Answers (3)

strash
strash

Reputation: 1321

Ok thats the code. We are using only linked list as you wanted. (linked list keeps track on the input order so we are using that too) As it is one to many relation we should have some kind of "foreign key" so we can see the related object. For each car you add no matter manual or auto, you should add a key for the location as you can see below for example rels[0] = 3; means that your first car will have relation with 4th object of the locations list. thats implemented in the code - take a look.

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

public class TestMain {

    public static void main(String[] args) {

        List<String> manual = new LinkedList<String>();
        List<String> automatic = new LinkedList<String>();
        List<String> location = new LinkedList<String>();
        int[] rels = new int[8];

        //cars with relations
        rels[0] = 1;
        manual.add("Queen");
        rels[1] = 1;
        manual.add("Purple");
        rels[2] = 1;
        manual.add("Hendrix");
        rels[3] = 1;
        automatic.add("Wicked");
        rels[4] = 0;
        automatic.add("Zeppelin");
        rels[5] = 0;
        automatic.add("Floyd");
        rels[6] = 1;
        automatic.add("Ramones");
        rels[7] = 2;
        automatic.add("Nirvana");

        //key-0
        location.add("CBD");
        //key-1
        location.add("Penrith");
        //key-2
        location.add("Ceremorne");
        //key-3
        location.add("Sutherland");

        //here is the value that you have from your input args[] for example
        String desiredLocation = "CBD";

        int index = getLocationIndex(location, desiredLocation);
        //if desired location not found we will print nothing
        if(index==-1)return;

        List mergedCars = new LinkedList<String>();
        mergedCars.addAll(manual);
        mergedCars.addAll(automatic);

        for (int i = 0; i < rels.length; i++) {
            if(index == rels[i])
            {
                System.out.println(mergedCars.get(i));
            }
        }

    }

    private static int getLocationIndex(List<String> location, String desiredLocation) {
        int counter=0;
        for (Iterator iterator = location.iterator(); iterator.hasNext();) {
            String temp = (String) iterator.next();
            if(temp.equals(desiredLocation))
            {
                return counter;
            }
            counter++;
        }
        return -1;
    }
}

Upvotes: 0

jscriptor
jscriptor

Reputation: 835

I think you would be better off using the approach explained In This Post. I believe this would be a much clearer implementation.

I hope this helps.

Upvotes: 0

Peiqin
Peiqin

Reputation: 388

This is hardly a database. They are just three separate data pieces. Use some object-oriented design technique to create classes, such as a class called Van. For example, it's not java code exactly, just for example.

Class Van {
    string name;
    VanType type; // e.x, Enum {auto, manual}
    Location location; // another class
}

Upvotes: 2

Related Questions