/**
Implements a sorted list of words
@author David Magnusson
@version 11/13/15
@author Period - 5
@author Assignment - Java Methods 13.4 Lab: Keeping Things in Order
@author Sources - TODO list collaborators
*/
public class SortedWordList extends java.util.ArrayList<String>
{
/**
* Constructor
*/
public SortedWordList()
{
super();
}
/**
* Constructor
* @param capacity the capacity of the list
*/
public SortedWordList(int capacity)
{
super(capacity);
}
public boolean contains
(String word
) {
return (indexOf(word) >= 0);
}
public int indexOf
( String word
) {
int left = 0, right = size() - 1, middle;
while ( left <= right )
{
// Take the index of the middle element between
// "left" and "right":
middle = ( left + right ) / 2;
// Compare this element to the target value
// and adjust the search range accordingly:
int diff = word.compareToIgnoreCase( get( middle ) );
if ( diff > 0 ) // target > a [middle]
{
left = middle + 1;
}
else if ( diff < 0 )
{// target < a[middle]
right = middle - 1;
}
else // target is equal to a[middle]
{
return middle;
}
}
return -1;
}
{
if ( i > 0)
{
if (!word.equals( get(i-1) ) && word.compareTo( get(i-1) ) > 0)
{
if ( i < size() -1 )
{
if (!word.equals( get(i+1) ) && word.compareTo( get(i+1) ) < 0)
{
return super.set( i, word );
}
}
return super.set( i, word );
}
}
if (i == 0 && !word.equals( get(i+1) ) && word.compareTo( get(i+1) ) < 0)
{
return super.set( i, word );
}
// if (indexOf(word) == i )
// {
// return super.set( i, word );
// }
// else
// {
// throw new IllegalArgumentException("word =" + word + " i =" + i);
// }
}
/**
* Adds the word to SortedWordList at index i if it fits there
* alphabetically.
* @param i the index
* @param word the word to be added
*/
public void add
(int i,
String word
) {
if (size() == 0)
{
super.add( i, word );
return;
}
if ( i > 0)
{
if (!word.equals( get(i-1) ) && word.compareTo( get(i-1) ) > 0)
{
if ( i < size() )
{
if (!word.equals( get(i) ) && word.compareTo( get(i) ) < 0)
{
super.add( i, word );
return;
}
}
super.add( i, word );
return;
}
}
if (i == 0 && !word.equals( get(i) ) && word.compareTo( get(i) ) < 0)
{
super.add(i, word );
return;
}
}
public boolean add
(String word
) {
int checkpoint = indexOf(word);
if (contains(word))
{
return false;
}
if (size() == 0 )
{
super.add( word );
return true;
}
if (size() == 1 && word.compareTo( get(0) ) > 0)
{
super.add( word );
return true;
}
else if(word.compareTo( get(0) ) < 0)
{
add(0,word);
return true;
}
if (size() == 2 && word.compareTo( get(1) ) > 0)
{
super.add( word );
return true;
}
else if (word.compareTo( get(0) ) > 0)
{
add(1,word);
return true;
}
else if (word.compareTo( get(0) ) < 0)
{
add(0, word);
return true;
}
add(checkpoint,word);
return true;
}
public void merge(SortedWordList additionalWords)
{
// int original = size();
// int additional = additionalWords.size();
// addAll(additionalWords);
// while ()
}
}