/*
* Code by David Beuze. No rights reserved :) - 2006
*
* contact: smerpy@gmail.com
*/
/*
* This code snippet takes a list of objects and checks for any redundancy in the list.
* In this example I've taken a list of Integer, but it can be generalized to any kind
* of object.
*/
/*Output:
*
* Oh no! The value 1 is redundant.
*
* */
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
public class RedundancyChecker {
public static void main(String[] a) {
new RedundancyChecker();
}
public RedundancyChecker() {
Integer[] array = new Integer[5]; // Create and
// array of
// Integer
Integer i0 = new Integer(0);
array[0] = i0;
Integer i1 = new Integer(1); // <--------
array[1] = i1; // |
Integer i2 = new Integer(2); // |--- redundant
// values
array[2] = i2; // |
Integer i3 = new Integer(1); // <--------
array[3] = i3;
Integer i4 = new Integer(4);
array[4] = i4;
// transform the array into a List
List l = Arrays.asList(array);
// Check the List
checkForRedundancy(l);
}
public boolean checkForRedundancy(List l) {
ListIterator li1 = l.listIterator(); // Make a
// general
// ListIterator
// on the list
while (li1.hasNext()) {
// Store the value of the actual first checked
// element of the List,
// it needs to be stored because it calls the
// .next(), which we can call only once per loop
// in order to sweep the whole list.
int check1 = ((Integer) li1.next()).intValue();
// Make a second ListIterator that will start
// with the element that is just after the
// actual first checked one,
// in order to avoid checking several times the
// same elements.
ListIterator li2 = l.listIterator(li1.nextIndex() + 1);
while (li2.hasNext()) {
// Store the following elements one by
// one and check to see if they match
// the actual one.
int check2 = ((Integer) li2.next()).intValue();
if (check1 == check2) {
System.out.println("Oh no! The value " + check1 + " is redundant.");
return true;
}
}
// The .next() method has already been called at
// the beginning of the loop.
}
return false;
}
}