import java.util.Arrays; /** A sequence of 0 or more ints. */ public class IntSequence implements Comparable { /** Current sequence in myValues[0 .. myCount-1]. */ private int[] _myValues; /** Size of current sequence. */ private int _myCount; /** An initially empty sequence. */ public IntSequence() { _myCount = 0; _myValues = new int[8]; } /** Return my current size. */ public int size() { return _myCount; } /** Return item #K in this sequence, 0 <= K < size(). */ public int get(int k) { boundsCheck(k); return _myValues[k]; } /** Add VAL to the end of my sequence. */ public void add(int val) { if (_myCount + 1 >= _myValues.length) { _myValues = Arrays.copyOf(_myValues, 2 * _myValues.length); } _myValues[_myCount] = val; _myCount += 1; } /** Set item K to VAL, 0 <= K < size(). */ public void set(int k, int val) { boundsCheck(k); _myValues[k] = val; } @Override public int compareTo(IntSequence x) { for (int i = 0; i < _myCount && i < x._myCount; i += 1) { if (_myValues[i] < x._myValues[i]) { return -1; } else if (_myValues[i] > x._myValues[i]) { return 1; } } return _myCount - x._myCount; } /** Check that index K is in bounds. */ private void boundsCheck(int k) { if (k < 0 || k >= _myCount) { throw new IndexOutOfBoundsException("" + k); } } }