Java tutorial
/* Copyright (C) 2007 Mobixess Inc. http://www.java-objects-database.com This file is part of the JODB (Java Objects Database) open source project. JODB is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. JODB is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ import java.io.Serializable; public class LongVector implements Serializable { /** * */ private static final long serialVersionUID = 1L; public final static int DEFAULT_INCREMENT = 256; private int _increment; private long _data[]; private int _size = 0; public LongVector() { _increment = DEFAULT_INCREMENT; _data = new long[_increment]; } public LongVector(int increment) { _increment = increment; _data = new long[increment]; } public LongVector(int initialSize, int increment) { _increment = increment; _data = new long[initialSize]; _size = initialSize; } public LongVector(long[] data) { _data = new long[data.length]; _size = data.length; _increment = DEFAULT_INCREMENT; System.arraycopy(data, 0, _data, 0, _size); } /** * Get the length of the list. * * @return length of the list */ public final int size() { return _size; } /** * Get the length of the list. * * @return length of the list */ public final void setSize(int sz) { _size = sz; } /** * Append a int onto the vector. * * @param value * Int to add to the list */ public final void addElement(long value) { ensureCapacity(_size + 1); _data[_size] = value; _size++; } private void ensureCapacity(int size) { if (size >= _data.length) { long newData[] = new long[size + _increment]; System.arraycopy(_data, 0, newData, 0, _data.length); _data = newData; } } /** * Append several int values onto the vector. * * @param value * Int to add to the list */ public final void addElements(long value, int numberOfElements) { ensureCapacity(_size + numberOfElements); for (int i = 0; i < numberOfElements; i++) { _data[_size] = value; _size++; } } /** * Inserts the specified node in this vector at the specified index. * * @param value * Int to insert * @param at * Index of where to insert */ public final void insertElementAt(long value, int at) { ensureCapacity(_size + 1); if (at <= (_size - 1)) { System.arraycopy(_data, at, _data, at + 1, _size - at); } _data[at] = value; _size++; } public final void removeAllElements() { for (int i = 0; i < _size; i++) { _data[i] = java.lang.Integer.MIN_VALUE; } _size = 0; } /** * Removes the first occurrence of the argument from this vector. If the * object is found in this vector, each component in the vector with an * index greater or equal to the object's index is shifted downward to have * an index one smaller than the value it had previously. * * * @return True if the int was removed, false if it was not found */ public final boolean removeElement(long s) { for (int i = 0; i < _size; i++) { if (_data[i] == s) { if ((i + 1) < _size) System.arraycopy(_data, i + 1, _data, i - 1, _size - i); else _data[i] = java.lang.Integer.MIN_VALUE; _size--; return true; } } return false; } /** * Deletes the component at the specified index. Each component in this * vector with an index greater or equal to the specified index is shifted * downward to have an index one smaller than the value it had previously. * * @param i * index of where to remove */ public final void removeElementAt(int i) { if (i > _size) System.arraycopy(_data, i + 1, _data, i, _size); else _data[i] = java.lang.Integer.MIN_VALUE; _size--; } /** * Sets the component at the specified index of this vector to be the * specified object. The previous component at that position is discarded. * * The index must be a value greater than or equal to 0 and less than the * current size of the vector. * * @param node * object to set * @param index * Index of where to set the object */ public final void setElementAt(long value, int index) { _data[index] = value; } /** * Get the nth element. * * @param i * index of object to get * * @return object at given index */ public final long elementAt(int i) { return _data[i]; } /** * Tell if the table contains the given node. * * @param s * object to look for * * @return true if the object is in the list */ public final boolean contains(long s) { for (int i = 0; i < _size; i++) { if (_data[i] == s) return true; } return false; } /** * Searches for the first occurence of the given argument, beginning the * search at index, and testing for equality using the equals method. * * @param elem * object to look for * @param index * Index of where to begin search * @return the index of the first occurrence of the object argument in this * vector at position index or later in the vector; returns -1 if * the object is not found. */ public final int indexOf(long elem, int index) { for (int i = index; i < _size; i++) { if (_data[i] == elem) return i; } return java.lang.Integer.MIN_VALUE; } /** * Searches for the first occurence of the given argument, beginning the * search at index, and testing for equality using the equals method. * * @param elem * object to look for * @return the index of the first occurrence of the object argument in this * vector at position index or later in the vector; returns -1 if * the object is not found. */ public final int indexOf(long elem) { for (int i = 0; i < _size; i++) { if (_data[i] == elem) return i; } return java.lang.Integer.MIN_VALUE; } /** * Searches for the first occurence of the given argument, beginning the * search at index, and testing for equality using the equals method. * * @param elem * Object to look for * @return the index of the first occurrence of the object argument in this * vector at position index or later in the vector; returns -1 if * the object is not found. */ public final int lastIndexOf(long elem) { for (int i = (_size - 1); i >= 0; i--) { if (_data[i] == elem) return i; } return java.lang.Integer.MIN_VALUE; } public long[] getDataAsArray() { if (_data.length == _size) { return _data; } long[] result = new long[_size]; System.arraycopy(_data, 0, result, 0, _size); return result; } public final int binarySearch(long key) { int low = 0; int high = _size; while (low <= high) { int mid = (low + high) >> 1; long midVal = _data[mid]; if (midVal < key) low = mid + 1; else if (midVal > key) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found. } }