public SortedDimensionDictionary(List<String> idToValue, int length) { Object2IntSortedMap<String> sortedMap = new Object2IntRBTreeMap<>(Comparators.naturalNullsFirst()); for (int id = 0; id < length; id++) { String value = idToValue.get(id); sortedMap.put(value, id); } this.sortedVals = Lists.newArrayList(sortedMap.keySet()); this.idToIndex = new int[length]; this.indexToId = new int[length]; int index = 0; for (IntIterator iterator = sortedMap.values().iterator(); iterator.hasNext(); ) { int id = iterator.nextInt(); idToIndex[id] = index; indexToId[index] = id; index++; } }
@Override public boolean isEmpty() { synchronized (sync) { return collection.isEmpty(); } } @Override
@Override public int size() { return collection.size(); } @Override
static public int[] argmax2(float[] scores, IntCollection labels) { if (labels == null || labels.isEmpty()) return argmax2(scores); IntIterator it = labels.iterator(); if (labels.size() < 2) return new int[]{it.nextInt(),-1}; int[] max = {it.nextInt(), it.nextInt()}; if (scores[max[0]] < scores[max[1]]) DSUtils.swap(max, 0, 1); while (it.hasNext()) { int i = it.nextInt(); if (scores[max[0]] < scores[i]) { max[1] = max[0]; max[0] = i; } else if (scores[max[1]] < scores[i]) max[1] = i; } return max; } }
@Override public boolean contains(final int k) { synchronized (sync) { return collection.contains(k); } } @Override
@Override public int[] toIntArray() { synchronized (sync) { return collection.toIntArray(); } } @Override
@Override public boolean add(final int k) { synchronized (sync) { return collection.add(k); } } @Override
static public int[] argmax2(float[] scores, IntCollection labels) { if (labels == null || labels.isEmpty()) return argmax2(scores); IntIterator it = labels.iterator(); if (labels.size() < 2) return new int[]{it.nextInt(),-1}; int[] max = {it.nextInt(), it.nextInt()}; if (scores[max[0]] < scores[max[1]]) DSUtils.swap(max, 0, 1); while (it.hasNext()) { int i = it.nextInt(); if (scores[max[0]] < scores[i]) { max[1] = max[0]; max[0] = i; } else if (scores[max[1]] < scores[i]) max[1] = i; } return max; } }
@Override public boolean contains(final int o) { return collection.contains(o); } @Override
@Override public int[] toIntArray() { return collection.toIntArray(); } /*
@Override @Deprecated public boolean add(final Integer k) { synchronized (sync) { return collection.add(k); } } @Override
@Override public IntIterator iterator() { return collection.iterator(); } @Override
@Override public int size() { synchronized (sync) { return collection.size(); } } @Override
@Override public boolean removeAll(final IntCollection c) { final int[] a = this.a; int j = 0; for (int i = 0; i < size; i++) if (!c.contains(a[i])) a[j++] = a[i]; final boolean modified = size != j; size = j; return modified; } @Override