I am writing a phone book program in java and I need to list the people in the list alphabetically, and for this I need to write a sorting algorithm for the list in java, and it should use only the compareTo () method. So can anyone help me do this?
public void listAlpha() { Node tempNode = head; for(int i = 0; i <= size; i++) { for(int j = 0; j <= i; j++) { int comparison = ((tempNode.getNext().getElement().getName()).compareTo(tempNode.getElement().getName())); if(comparison < 0) { Person tempPerson = tempNode.getElement(); tempNode.setElement(tempNode.getNext().getElement()); tempNode.getNext().setElement(tempPerson); tempNode = tempNode.getNext(); } } }
(By the way, this is homework, and I use my own data structures.)
This is the class that belongs to the method described above:
import java.util.*; /** Singly linked list implementation .*/ public class SLinkedList<E> implements LinkedList<E>, Iterable<E> { protected Node<E> head; // head node of the list protected Node<E> tail; // tail node of the list protected int size; // number of nodes in the list public Iterator<E> iterator() { return new LinkedListIterator(head); } /** Default constructor that creates an empty list */ public SLinkedList() { head = null; tail = null; size = 0; } public int size() { return size; } public boolean isEmpty() { return size == 0; } public void addFirst(E newElement) { Node<E> newNode = new Node(newElement,null); if(size == 0) //if list is empty tail = newNode; newNode.setNext(head); head = newNode; size++; } public void addLast(E newElement) { Node<E> newNode = new Node(newElement,null); if(size == 0) //if list is empty head = newNode; if (size != 0) //if list is not empty tail.setNext(newNode); tail = newNode; size++; } public E removeFirst() { Node<E> tempNode = null; if (size != 0) { if(size == 1) tail = null; tempNode = head; head = head.getNext(); tempNode.setNext(null); size--; } //if list is empty then return null return tempNode.getElement(); } public E removeLast() { Node<E> tempNode = head; if(size == 0) return null; if(size == 1) { head = null; tail = null; size--; return tempNode.getElement(); } //size is greater than 1 for(int i=1; i<=size-2; i++) { tempNode = tempNode.getNext(); //go to element that before the tail } Node<E> tempNode2 = tail; tail = tempNode; tail.setNext(null); size--; return tempNode2.getElement(); } public void remove(E element){ int index = 0; boolean found = false; Node<E> temp = head; for(int i=1; i<=size; i++) {//find the node with element index++; if(temp.getElement().equals(element)){ found = true; break; } temp = temp.getNext(); } if(found){ if(index == 1) removeFirst(); else if(index == size) removeLast(); else{ //find the previous node Node<E> prev = head; for(int i=1; i<index-1; i++) { prev = prev.getNext(); } prev.setNext(temp.getNext()); temp.setNext(null); size--; } } } public int searchList(E searchKey) { if(size == 0) return -1; Node tempNode = head; for(int i=1; i<=size; i++) { if(tempNode.getElement().equals(searchKey)) return i; //return index of the node tempNode = tempNode.getNext(); } return -1; //not found } public void printList() { Node tempNode = head; for(int i=1; i<=size; i++) { System.out.print(tempNode.getElement()); if(i!=size) //if it is not last element System.out.print(" - "); tempNode = tempNode.getNext(); } System.out.println(); }
Character class:
public class Person { private String name; private String surname; private String address; private PhoneNumber phone1; private PhoneNumber phone2; private PhoneNumber phone3; public Person() { name = null; surname = null; address = null; phone1.setPhone(0); phone1.setType(""); phone2.setPhone(0); phone2.setType(""); phone3.setPhone(0); phone3.setType(""); } public Person(String n, String s, String a,PhoneNumber p1, PhoneNumber p2, PhoneNumber p3) { name = n; surname = s; address = a; phone1 = p1; phone2 = p2; phone3 = p3; } public String getName() { return name; } public void setName(String n) { name = n; } public String getSur() { return surname; } public void setSur(String s) { surname = s; } public void insertPhone(PhoneNumber phone) { if(phone2 == null) phone2 = phone; else if(phone3 == null) phone3 = phone; } public PhoneNumber getPhone1() { return phone1; } public PhoneNumber getPhone2() { return phone2; } public PhoneNumber getPhone3() { return phone3; } public String getAdd() { return address; } public void setAdd(String a) { address = a; }
source share