package org.springblade.modules.words.internals; import java.util.ArrayList; import java.util.List; import java.util.Map; public class IntDictionary { private int[] _keys; private int[] _values; private int last; public IntDictionary() { last = -1; } public int[] getKeys() { return _keys; } public int[] getValues() { return _values; } public void SetDictionary(Map dict) { List keys = new ArrayList(); dict.forEach((k, v) -> { keys.add((int) k); }); _keys = new int[dict.size()]; _values = new int[dict.size()]; for (int i = 0; i < keys.size(); i++) { _keys[i] = keys.get(i); _values[i] = dict.get(_keys[i]); } last = _keys.length - 1; } public void SetDictionary(int[] keys, int[] values) { _keys = keys; _values = values; last = _keys.length - 1; } public int IndexOf(int key) { if (last == -1) { return -1; } if (_keys[0] == key) { return 0; } if (_keys[last] == key) { return last; } int left = 0; int right = last; while (left + 1 < right) { int mid = (left + right) >> 1; int d = _keys[mid] - key; if (d == 0) { return mid; } else if (d > 0) { right = mid; } else { left = mid; } } return -1; } public int GetValue(int index){ return _values[index]; } }