LongSparseLongArray.java revision f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccda
1dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey/*
2dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * Copyright (C) 2007 The Android Open Source Project
3dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey *
4dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
5dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * you may not use this file except in compliance with the License.
6dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * You may obtain a copy of the License at
7dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey *
8dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
9dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey *
10dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * Unless required by applicable law or agreed to in writing, software
11dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
12dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * See the License for the specific language governing permissions and
14dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * limitations under the License.
15dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey */
16dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
17dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkeypackage android.util;
18dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
19dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkeyimport com.android.internal.util.ArrayUtils;
20dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
21dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkeyimport java.util.Arrays;
22dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
23dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey/**
24dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * Map of {@code long} to {@code long}. Unlike a normal array of longs, there
25dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * can be gaps in the indices. It is intended to be more efficient than using a
26dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * {@code HashMap}.
27dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey *
28dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey * @hide
29dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey */
30dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkeypublic class LongSparseLongArray implements Cloneable {
31dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    private long[] mKeys;
32dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    private long[] mValues;
33dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    private int mSize;
34dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
35dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
36dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Creates a new SparseLongArray containing no mappings.
37dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
38dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public LongSparseLongArray() {
39dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        this(10);
40dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
41dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
42dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
43dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Creates a new SparseLongArray containing no mappings that will not
44dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * require any additional memory allocation to store the specified
45f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn     * number of mappings.  If you supply an initial capacity of 0, the
46f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn     * sparse array will be initialized with a light-weight representation
47f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn     * not requiring any additional array allocations.
48dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
49dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public LongSparseLongArray(int initialCapacity) {
50f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn        if (initialCapacity == 0) {
51f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn            mKeys = SparseLongArray.EMPTY_LONGS;
52f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn            mValues = SparseLongArray.EMPTY_LONGS;
53f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn        } else {
54f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn            initialCapacity = ArrayUtils.idealLongArraySize(initialCapacity);
55f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn            mKeys = new long[initialCapacity];
56f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn            mValues = new long[initialCapacity];
57f4bf0ae2a7c2d9d92c5c8abdb82baa53b4c9ccdaDianne Hackborn        }
58dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mSize = 0;
59dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
60dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
61dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    @Override
62dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public LongSparseLongArray clone() {
63dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        LongSparseLongArray clone = null;
64dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        try {
65dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            clone = (LongSparseLongArray) super.clone();
66dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            clone.mKeys = mKeys.clone();
67dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            clone.mValues = mValues.clone();
68dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        } catch (CloneNotSupportedException cnse) {
69dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            /* ignore */
70dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
71dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return clone;
72dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
73dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
74dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
75dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Gets the long mapped from the specified key, or <code>0</code>
76dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * if no such mapping has been made.
77dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
78dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public long get(long key) {
79dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return get(key, 0);
80dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
81dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
82dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
83dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Gets the long mapped from the specified key, or the specified value
84dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * if no such mapping has been made.
85dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
86dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public long get(long key, long valueIfKeyNotFound) {
87dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        int i = Arrays.binarySearch(mKeys, 0, mSize, key);
88dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
89dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        if (i < 0) {
90dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            return valueIfKeyNotFound;
91dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        } else {
92dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            return mValues[i];
93dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
94dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
95dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
96dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
97dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Removes the mapping from the specified key, if there was any.
98dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
99dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public void delete(long key) {
100dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        int i = Arrays.binarySearch(mKeys, 0, mSize, key);
101dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
102dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        if (i >= 0) {
103dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            removeAt(i);
104dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
105dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
106dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
107dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
108dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Removes the mapping at the given index.
109dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
110dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public void removeAt(int index) {
111dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        System.arraycopy(mKeys, index + 1, mKeys, index, mSize - (index + 1));
112dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        System.arraycopy(mValues, index + 1, mValues, index, mSize - (index + 1));
113dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mSize--;
114dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
115dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
116dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
117dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Adds a mapping from the specified key to the specified value,
118dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * replacing the previous mapping from the specified key if there
119dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * was one.
120dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
121dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public void put(long key, long value) {
122dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        int i = Arrays.binarySearch(mKeys, 0, mSize, key);
123dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
124dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        if (i >= 0) {
125dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            mValues[i] = value;
126dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        } else {
127dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            i = ~i;
128dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
129dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            if (mSize >= mKeys.length) {
130dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey                growKeyAndValueArrays(mSize + 1);
131dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            }
132dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
133dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            if (mSize - i != 0) {
134dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey                System.arraycopy(mKeys, i, mKeys, i + 1, mSize - i);
135dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey                System.arraycopy(mValues, i, mValues, i + 1, mSize - i);
136dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            }
137dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
138dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            mKeys[i] = key;
139dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            mValues[i] = value;
140dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            mSize++;
141dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
142dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
143dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
144dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
145dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Returns the number of key-value mappings that this SparseIntArray
146dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * currently stores.
147dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
148dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public int size() {
149dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return mSize;
150dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
151dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
152dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
153dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Given an index in the range <code>0...size()-1</code>, returns
154dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * the key from the <code>index</code>th key-value mapping that this
155dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * SparseLongArray stores.
156dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
157dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public long keyAt(int index) {
158dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return mKeys[index];
159dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
160dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
161dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
162dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Given an index in the range <code>0...size()-1</code>, returns
163dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * the value from the <code>index</code>th key-value mapping that this
164dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * SparseLongArray stores.
165dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
166dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public long valueAt(int index) {
167dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return mValues[index];
168dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
169dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
170dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
171dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Returns the index for which {@link #keyAt} would return the
172dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * specified key, or a negative number if the specified
173dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * key is not mapped.
174dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
175dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public int indexOfKey(long key) {
176dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return Arrays.binarySearch(mKeys, 0, mSize, key);
177dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
178dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
179dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
180dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Returns an index for which {@link #valueAt} would return the
181dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * specified key, or a negative number if no keys map to the
182dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * specified value.
183dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Beware that this is a linear search, unlike lookups by key,
184dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * and that multiple keys can map to the same value and this will
185dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * find only one of them.
186dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
187dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public int indexOfValue(long value) {
188dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        for (int i = 0; i < mSize; i++)
189dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            if (mValues[i] == value)
190dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey                return i;
191dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
192dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        return -1;
193dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
194dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
195dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
196dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Removes all key-value mappings from this SparseIntArray.
197dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
198dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public void clear() {
199dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mSize = 0;
200dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
201dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
202dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    /**
203dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * Puts a key/value pair into the array, optimizing for the case where
204dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     * the key is greater than all existing keys in the array.
205dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey     */
206dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    public void append(long key, long value) {
207dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        if (mSize != 0 && key <= mKeys[mSize - 1]) {
208dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            put(key, value);
209dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            return;
210dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
211dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
212dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        int pos = mSize;
213dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        if (pos >= mKeys.length) {
214dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey            growKeyAndValueArrays(pos + 1);
215dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        }
216dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
217dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mKeys[pos] = key;
218dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mValues[pos] = value;
219dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mSize = pos + 1;
220dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
221dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
222dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    private void growKeyAndValueArrays(int minNeededSize) {
223dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        int n = ArrayUtils.idealLongArraySize(minNeededSize);
224dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
225dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        long[] nkeys = new long[n];
226dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        long[] nvalues = new long[n];
227dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
228dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        System.arraycopy(mKeys, 0, nkeys, 0, mKeys.length);
229dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        System.arraycopy(mValues, 0, nvalues, 0, mValues.length);
230dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey
231dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mKeys = nkeys;
232dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey        mValues = nvalues;
233dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey    }
234dda73b5dcd92006762a1c71e2fb352e64fa265efJeff Sharkey}
235