Bufferはスタック,キュー及びバイナリヒープの機能を提供する.
標準ライブラリにもスタック,キューはあるのでわざわざこちらを使う必要があるかどうか..の判断は私たち次第である.
コード
この例ではキューとしてUnboundedFifoBuffer, スタックとしてArrayStack, バイナリヒープとしてPriorityOrderを使っている.
import java.util.Comparator;
import org.apache.commons.collections.ArrayStack;
import org.apache.commons.collections.Buffer;
import org.apache.commons.collections.buffer.PriorityBuffer;
import org.apache.commons.collections.buffer.UnboundedFifoBuffer;
import org.junit.Test;
import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;
public class CollectionsTest {
@Test
public void testBuffer() {
// Queue - FIFO
Buffer buffer = new UnboundedFifoBuffer();
injectTestValue( buffer );
assertThat( (String)buffer.get(), is( "1st" ) );
assertThat( (String)buffer.remove(), is( "1st" ) );
assertThat( (String)buffer.remove(), is( "2nd" ) );
assertThat( (String)buffer.remove(), is( "3rd" ) );
// Stack - LIFO
buffer = new ArrayStack();
injectTestValue( buffer );
assertThat( (String)buffer.get(), is( "3rd" ) );
assertThat( (String)buffer.remove(), is( "3rd" ) );
assertThat( (String)buffer.remove(), is( "2nd" ) );
assertThat( (String)buffer.remove(), is( "1st" ) );
// BinaryHeap
// ascending
buffer = new PriorityBuffer( true, new StringLengthComparator<String>() );
injectTestValueForPriorityBuffer( buffer );
assertThat( (String)buffer.remove(), is( "/usr" ) );
assertThat( (String)buffer.remove(), is( "/usr/local" ) );
assertThat( (String)buffer.remove(), is( "/usr/local/bin" ) );
// descending
buffer = new PriorityBuffer( false, new StringLengthComparator<String>() );
injectTestValueForPriorityBuffer( buffer );
assertThat( (String)buffer.remove(), is( "/usr/local/bin" ) );
assertThat( (String)buffer.remove(), is( "/usr/local" ) );
assertThat( (String)buffer.remove(), is( "/usr" ) );
}
private void injectTestValue( Buffer buffer ) {
buffer.add( "1st" );
buffer.add( "2nd" );
buffer.add( "3rd" );
}
private void injectTestValueForPriorityBuffer( Buffer buffer ) {
buffer.add( "/usr" );
buffer.add( "/usr/local" );
buffer.add( "/usr/local/bin" );
}
}
class StringLengthComparator<String> implements Comparator<String> {
public int compare( String arg0, String arg1 ) {
if( ((java.lang.String) arg0).length() > ((java.lang.String) arg1).length() )
return 1;
else if( ((java.lang.String) arg0).length() == ((java.lang.String) arg1).length() )
return 0;
else
return -1;
}
}
0 件のコメント:
コメントを投稿