Java Comparator with insertion sort

Main.java, main class
[code language=”java”]
import java.util.Random;

public class Main {

public static void main(String args[])
{

MyVector<Student> students = getStudents(100);

//sort the students by name, from a to z
students.sort(new StudentNameComparator());
System.out.println(students.toString());

//sort the students by id, from smaller id to larger id
students.sort(new StudentIdComparator());
System.out.println(students.toString());

}

//create size students in a vector
public static MyVector<Student> getStudents(int size)
{
MyVector<Student> students = new MyVector<Student>();

Random random = new Random();

for(int i=0; i<size; i++)
{
students.add(new Student(generateRandomName(),10000+random.nextInt(99999) ) );
}

return students;
}

//generate a random name
public static String generateRandomName()
{
String alphabet= "abcdefghijklmnopqrstuvwxyz";
String name = "";
Random random = new Random();
int randomLen = 3+random.nextInt(10);
for (int i = 0; i < randomLen; i++) {
char c = alphabet.charAt(random.nextInt(26));
name+=c;
}

return name;
}
}
[/code]

Student.java, student class. It will only contain two fields, name and id. We will create a comparator class later for each of them and use it to do the sorting by name and id.
[code language=”java”]
public class Student {

private String name;
private int id;

public Student(String name, int id)
{
this.name=name;
this.id=id;
}
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String toString() {
return name+" "+id+"\n";
}

}
[/code]

StudentNameComparator.java, student name comparator class.
[code language=”java”]
import java.util.Comparator;

public class StudentNameComparator implements Comparator<Student>{

@Override
// Compare student names
// Returns: < 0 if s1 is smaller than s2
// 0 if s1 equals s2
// > 0 if s1 is larger than s2
public int compare(Student s1, Student s2) {
String name1 = s1.getName().toLowerCase();
String name2 = s2.getName().toLowerCase();

return name1.compareTo(name2);
}
}
[/code]

StudentIdComparator.java, student id comparator class.
[code language=”java”]
import java.util.Comparator;

public class StudentIdComparator implements Comparator<Student>{

@Override
// Compare student Ids
// Returns: < 0 if s1 is smaller than s2
// 0 if s1 equals s2
// > 0 if s1 is larger than s2
public int compare(Student s1, Student s2) {
// TODO Auto-generated method stub
Integer s1Id=(Integer)s1.getId();
Integer s2Id=(Integer)s2.getId();

return s1Id.compareTo(s2Id);
}

}

[/code]

MyVector.java, extended from Vector class and implementing the insertion sort that takes a comparator and sort the vector by the given comparator.
[code language=”java”]
import java.util.Comparator;
import java.util.Vector;

public class MyVector<E> extends Vector<E> {

public MyVector()
{
super();
}

// insertion sort
// pre: c is a valid comparator
// post: sort this vector in order determined by c
public void sort(Comparator<E> c)
{
int numSorted = 1; // number of values in place
int index; // general index
int n = size(); // length of the array
while (numSorted < n)
{
// take the first unsorted value
E temp = get(numSorted);
// …and insert it among the sorted:
for (index = numSorted; index > 0; index–)
{
if (c.compare(temp,get(index-1)) < 0)
{
set(index, get(index-1));
}
else
{
break;
}
}
// reinsert value
set(index, temp);
numSorted++;
}
}
}
[/code]

Search within Codexpedia

Custom Search

Search the entire web

Custom Search