Skip to main content

Java Example: LinkedList

The purpose of this example is simply get some decent exposure to the LinkedList class. A phone directory is the most desirable choice to show this data structure. Within our phone directory program, we'll want to be able to:
  1. add a new record,
  2. delete the current record, 
  3. change the first name of the current record, 
  4. change the last name of the current record, 
  5. change the phone number of the current record, 
  6. select the current record,
  7. show all records and 
  8. quit the program.
The phone directory will store the first name, last name and the phone number. When inserting, we're going to want to insert the new record into the correct order without creating or using a sorting algorithm. You may have duplicate names but not duplicate phone numbers. The phone directory should be sorted by last name, first name, phone number. When deleting a record, there will not be a current record that's selected. To select the record after deletion, you must use the select the current record option. You will not be able to change the first name, last name or phone number unless the current record is selected.

Below is my phone directory program. To help follow the logic, start with the main() method. It instantiates the class in which it's located and calls the start() method. If you look above the main() method, you'll notice three instance variables: LinkedList<Person> persons, Scanner input and int currentRecord. The persons variable is where you will store Person objects into when you create them (going to the bottom of the class you'll notice a nested class called Person that has the firstName, lastName and phoneNumber instance variables). The input variable is of type Scanner meaning that it awaits user input when we need it. And the currentRecord variable holds the current record. 

When you call the start() method, a prompt is displayed and the user has the option to enter a value. If they don't select from the available values, an error is displayed and the user is asked to enter one of the available values again. A common approach to using the phone directory may be as follows:
  1. The user selects to add a new record.
    • Prompted to enter the first name.
    • Prompted to enter the last name.
    • Prompted to enter the phone number.
      • Checks to make sure that the phone number is correct.
      • Checks to make sure that the phone number is not in the LinkedList already.
    • Creates a new Person object.
    • Calls the getIndexOfInsertion() method to figure out where to insert the newly created Person object in order.
    • Inserts the Person object into the persons LinkedList in the correct order.
    • Displays the current record.
  2. The user selects to change the first name
    • Prompted to enter first name.
    • Gets the current record and stores it in a temp variable.
    • Deletes the current record from the LinkedList.
    • Modifies the first name in the Person object that's stored in the temp variable.
    • Since the changing of the first name might alter the position in the phone directory, a call to getIndexOfInsertion() is made.
    • The updated Person is re-inserted into the persons LinkedList.
    • Current record is displayed.
  3. The user selects to change the last name.
    • An almost identical approach is taken as with the changing of the first name.
  4. The user selects to change the phone number.
    • A similar approach to changing the first and last name.
    • The only difference is that the program must check and verify that a) the number is correct and b) that the number doesn't exist in the LinkedList.
  5. The user might add a few more records to the phone directory.
  6. The user selects to display all records.
    • A presentable list is displayed.
    • Extra attention is applied to make sure that all columns line up properly.
      • I didn't include a way to resize the column titles, but you may if you choose to. You'll just have to get the longest first name and last name and go from there.
  7. The user selects to delete the current record.
    • The current Person object is removed from the persons LinkedList.
  8. The user selects a new current record, adds a new record to the phone directory or exits the program.

Comments

Post a Comment

Popular posts from this blog

Beginner Java Exercise: Sentinel Values and Do-While Loops

In my previous post on while loops, we used a loop-continuation-condition to test the arguments. In this example, we'll loop at a sentinel-controlled loop. The sentinel value is a special input value that tests the condition within the while loop. To jump right to it, we'll test if an int variable is not equal to 0. The data != 0 within the while (data != 0) { ... } is the sentinel-controlled-condition. In the following example, we'll keep adding an integer to itself until the user enters 0. Once the user enters 0, the loop will break and the user will be displayed with the sum of all of the integers that he/she has entered. As you can see from the code above, the code is somewhat redundant. It asks the user to enter an integer twice: Once before the loop begins, and an x amount of times within the loop (until the user enters 0). A better approach would be through a do-while loop. In a do-while loop, you "do" something "while" the condition

Programming Language Concepts Questions/Answers Part 3

1. What is an associative array? - An unordered collection of data elements that are indexed by keys. 2. Each element of an associative array is a pair consisting of a _______ and a _______. - key and a value 3. True or False? Java supports associative arrays? - True. As a matter of fact, Perl, Python, Ruby, C++, C# and F# do too. 4. What are associative arrays called in Perl? - hashes 5. Why are associative arrays in Perl called hashes? - Because their elements are stored and retrieved with a hash function 6. What character does a hash in Perl begin with? % 7. In Perl, each key is a _____ and each value is a _______. - string - scalar 8. In Perl, subscripting is done using _______ and _______. - braces and keys 9. In Perl, how are elements removed from hashes? - using delete 10. In Perl, the ________ operator tests whether a particular value is a key in a hash. - exists 11. What are associative arrays called in Python? - dictionaries 12. What is a dif

Creating your own ArrayList in Java

Wanted to show that certain data structures in Java can be created by you. In this example, we'll go ahead and create an ArrayList data structure that has some of the methods that the built in ArrayList class has. We'll create 2 constructors: The default constructor that creates an ArrayList with a default size of 10. Constructor that allows an initial size to be passed to the array. We'll also create a number of methods: void add(Object x);  A method that allows you to place an Object at the end of the ArrayList. void add(int index, Object x);  A method that allows you to place a value at a given location. Object get(int index):  Allows you to retrieve a value of the arrayList array from a given location. int size();  Allows you to get the number of elements currently in the Arraylist. boolean isEmpty();  Tests to see if the Arraylist is empty. boolean isIn(Object x);  A method that sees if a particular object exist in the arrayList. int find(Object x);