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. */ public class DynamicIntArray { final static int DEFAULT_CHUNK_SIZE = 256; final static int DEFAULT_CHUNKS = 16; private int _chunkSize; private int[][] _data; private int _length; public DynamicIntArray() { this(DEFAULT_CHUNK_SIZE); } public DynamicIntArray(int chunkSize) { _chunkSize = chunkSize; _data = new int[DEFAULT_CHUNKS][]; } public boolean isEmpty() { return (_length == 0); } private void ensureCapacity(int index) { if (index >= _length) { int i = index / _chunkSize; if (i >= _data.length) { // grow by 50% int new_size = (i * 3) / 2 + 1; int[][] newChunk = new int[new_size][]; System.arraycopy(_data, 0, newChunk, 0, _data.length); _data = newChunk; } _length = index + 1; } } public int get(int index) { if (index >= _length) { throw new IndexOutOfBoundsException("Index " + index + " is outside of 0.." + (_length - 1)); } int i = index / _chunkSize; int j = index % _chunkSize; if (_data[i] == null) { return 0; } else { return _data[i][j]; } } public void set(int index, int value) { int i = index / _chunkSize; int j = index % _chunkSize; ensureCapacity(index); if (_data[i] == null) { _data[i] = new int[_chunkSize]; } _data[i][j] = value; } public int size() { return _length; } public String toString() { int i; StringBuffer sb = new StringBuffer(_length * 4); sb.append('{'); int l = _length - 1; for (i = 0; i < l; i++) { sb.append(get(i)); sb.append(','); } sb.append(get(i)); sb.append('}'); return sb.toString(); } }