Programming Assignment : Priority Queue as Max Heap
Implement a priority queue generic (e.g., PriorityQ<T>) using a max heap, instead of a min heap. You should use the posted code (Downloads > Class Code > Binary Tree Implementation > PriQueue.java) as a starting point. In addition, the course textbook describes max heaps in Chapter 26.
Once your generic class is implemented, use it to simulate a waiting line, in which customers are serviced by age (oldest first):
1 Download the data file names.txt to your project folder (either NetBeans or Eclipse)
2
3 Implement the Person object class, such that Person implements Comparable<Person>:
4
◦ Data Fields:
▪ String name
▪ int age
▪
◦ Constructor:
▪ Person(String, int)
▪
◦ Methods:
▪ getName() → String
▪ getAge() → int
▪ toString() → "name (age)"
▪ compareTo(Person other) →
▪ < 0 if this.age < other.age
▪ > 0 if this.age > other.age
▪ == 0 if this.age == other.age
▪
5 Implement the following client program:
public static void main(String[] args)
{
final String FILE_NAME = "names.txt";
PriorityQ<Person> waitLine = new PriorityQ<Person>();
Random randy = new Random(); // make sure to import java.util.*;
try
{
ArrayList<String> names = readNames(FILE_NAME);
// have randy add 100 people, each aged between 1 and 100, to the list
int numNames = names.size();
for (int count=0; count<100; count++)
{
int age = 1 + randy.nextInt(100); // pick random age
int index = randy.nextInt( numNames ); // pick random name
String name = names.get( index );
waitLine.enqueue( new Person(name, age) );
} // end creation loop
System.out.print("Waiting Line: ");
System.out.println(waitLine);
System.out.println();
// empty the queue and output each person served
while (!waitLine.isEmpty()) {
Person nextPerson = waitLine.dequeue();
System.out.println( nextPerson.getName() + ", who is " +
nextPerson.getAge() + " years old, was just served.");
} // end removal loop
}
catch (IOException e)
{
e.printStackTrace();
} // end try/catch
} // end main
/**
* method reads names from a text file
* @param the text file name
* @return list of names
*/
static ArrayList<String> readNames(String fileName)
{
/*** ADD METHOD CODE HERE ***/
} // end readNames
Sample Run:
Waiting Line: [Elijah(100), Abigail(98), Hailey(95), Robert(98), Luke(97), Alyssa(91), Tyler(91), Thomas(93), Zachary(95), Hunter(75), Paige(95), Isaiah(85), Jose(79), Logan(91), Noah(52), Jacob(51), Christopher(90), Ashley(89), Alexandra(81), Brandon(60), Connor(65), Ella(56), Christian(79), Justin(59), Emily(57), Madison(65), Grace(76), Matthew(90), Alexis(66), Kevin(20), Megan(44), Austin(33), Julia(45), Joseph(70), Brianna(88), Dylan(45), Destiny(63), Jessica(76), Nicole(70), Maria(60), Sophia(51), Samantha(23), Anna(57), Victoria(40), Allison(38), Natalie(67), William(70), Chloe(44), Jordan(55), Kylie(55), Sydney(24), Ethan(13), Nathan(6), David(12), Jasmine(16), Michael(63), Rachel(69), Morgan(66), Gabriel(4), Daniel(9), Alexander(14), Lauren(12), Jennifer(42), Kayla(8), Kaitlyn(17), John(43), Caleb(7), Haley(38), Hannah(52), James(52), Mia(86), Katherine(7), Elizabeth(17), Andrew(35), Jordan(31), Anthony(24), Aidan(27), Taylor(65), Cameron(9), Joshua(1), Emma(57), Ava(3), Jason(23), Savannah(16), Angel(22), Jonathan(11), Brooke(25), Isabella(7), Evan(36), Samuel(28), Jack(14), Mackenzie(5), Olivia(22), Ryan(62), Isaac(56), Sarah(2), Aaron(9), Benjamin(25), Stephanie(47), Nicholas(11)]
Elijah, who is 100 years old, was just served.
Abigail, who is 98 years old, was just served.
Robert, who is 98 years old, was just served.
Luke, who is 97 years old, was just served.
Hailey, who is 95 years old, was just served.
Paige, who is 95 years old, was just served.
Zachary, who is 95 years old, was just served.
Thomas, who is 93 years old, was just served.
Tyler, who is 91 years old, was just served.
Logan, who is 91 years old, was just served.
Alyssa, who is 91 years old, was just served.
Matthew, who is 90 years old, was just served.
Christopher, who is 90 years old, was just served.
Ashley, who is 89 years old, was just served.
Brianna, who is 88 years old, was just served.
Mia, who is 86 years old, was just served.
Isaiah, who is 85 years old, was just served.
Alexandra, who is 81 years old, was just served.
Jose, who is 79 years old, was just served.
Christian, who is 79 years old, was just served.
Grace, who is 76 years old, was just served.
Jessica, who is 76 years old, was just served.
Hunter, who is 75 years old, was just served.
William, who is 70 years old, was just served.
Nicole, who is 70 years old, was just served.
Joseph, who is 70 years old, was just served.
Rachel, who is 69 years old, was just served.
Natalie, who is 67 years old, was just served.
Alexis, who is 66 years old, was just served.
Morgan, who is 66 years old, was just served.
Madison, who is 65 years old, was just served.
Connor, who is 65 years old, was just served.
Taylor, who is 65 years old, was just served.
Michael, who is 63 years old, was just served.
Destiny, who is 63 years old, was just served.
Ryan, who is 62 years old, was just served.
Brandon, who is 60 years old, was just served.
Maria, who is 60 years old, was just served.
Justin, who is 59 years old, was just served.
Emma, who is 57 years old, was just served.
Emily, who is 57 years old, was just served.
Anna, who is 57 years old, was just served.
Ella, who is 56 years old, was just served.
Isaac, who is 56 years old, was just served.
Kylie, who is 55 years old, was just served.
Jordan, who is 55 years old, was just served.
Noah, who is 52 years old, was just served.
James, who is 52 years old, was just served.
Hannah, who is 52 years old, was just served.
Sophia, who is 51 years old, was just served.
Jacob, who is 51 years old, was just served.
Stephanie, who is 47 years old, was just served.
Dylan, who is 45 years old, was just served.
Julia, who is 45 years old, was just served.
Megan, who is 44 years old, was just served.
Chloe, who is 44 years old, was just served.
John, who is 43 years old, was just served.
Jennifer, who is 42 years old, was just served.
Victoria, who is 40 years old, was just served.
Haley, who is 38 years old, was just served.
Allison, who is 38 years old, was just served.
Evan, who is 36 years old, was just served.
Andrew, who is 35 years old, was just served.
Austin, who is 33 years old, was just served.
Jordan, who is 31 years old, was just served.
Samuel, who is 28 years old, was just served.
Aidan, who is 27 years old, was just served.
Benjamin, who is 25 years old, was just served.
Brooke, who is 25 years old, was just served.
Sydney, who is 24 years old, was just served.
Anthony, who is 24 years old, was just served.
Jason, who is 23 years old, was just served.
Samantha, who is 23 years old, was just served.
Olivia, who is 22 years old, was just served.
Angel, who is 22 years old, was just served.
Kevin, who is 20 years old, was just served.
Kaitlyn, who is 17 years old, was just served.
Elizabeth, who is 17 years old, was just served.
Jasmine, who is 16 years old, was just served.
Savannah, who is 16 years old, was just served.
Jack, who is 14 years old, was just served.
Alexander, who is 14 years old, was just served.
Ethan, who is 13 years old, was just served.
Lauren, who is 12 years old, was just served.
David, who is 12 years old, was just served.
Nicholas, who is 11 years old, was just served.
Jonathan, who is 11 years old, was just served.
Aaron, who is 9 years old, was just served.
Cameron, who is 9 years old, was just served.
Daniel, who is 9 years old, was just served.
Kayla, who is 8 years old, was just served.
Katherine, who is 7 years old, was just served.
Caleb, who is 7 years old, was just served.
Isabella, who is 7 years old, was just served.
Nathan, who is 6 years old, was just served.
Mackenzie, who is 5 years old, was just served.
Gabriel, who is 4 years old, was just served.
Ava, who is 3 years old, was just served.
Sarah, who is 2 years old, was just served.
Joshua, who is 1 years old, was just served.