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 件のコメント:
コメントを投稿