public ArrayList<K> keysAsArrayList() { ArrayList<K> al = new ArrayList<>(order.size); for (int i = 0; i < order.size; i++) { al.add(keyAt(i)); } return al; }
/** * Gets a random key from this MultiArrangement in constant time, using the given IRNG to generate a random number. * @param rng used to generate a random index for a key * @return a random key from this MultiArrangement, or null if this is empty */ public K randomKey(IRNG rng) { if(rng == null) return null; return keyAt(rng.nextInt(order.size)); }
@Override public String toString() { final StringBuilder s = new StringBuilder(); int n = size(), i = 0; boolean first = true; s.append("Arrangement{"); while (i < n) { if (first) first = false; else s.append(", "); s.append(keyAt(i)).append(':').append(i); } s.append("}"); return s.toString(); } @Override
@Override public boolean equals(Object o) { if (o == this) return true; if (!(o instanceof MultiArrangement)) return false; MultiArrangement<?> m = (MultiArrangement<?>) o; if (m.size() != size()) return false; if(!m.order.equals(order)) return false; for (int i = 0; i < order.size; i++) { if(!keyAt(i).equals(m.keyAt(i))) return false; } return true; }
/** * Produces a copy of this MultiArrangement, but only using up to the given amount of items to take. Does a shallow copy * of individual keys, so the references will be shared. * @param amount the number of items to copy from this MultiArrangement; will copy all items if greater than size * @return a new MultiArrangement with up to amount items copied from this into it. */ public MultiArrangement<K> take(int amount) { amount = Math.min(order.size, Math.max(0, amount)); MultiArrangement<K> nx = new MultiArrangement<>(amount, f); for (int i = 0; i < amount; i++) { nx.add(keyAt(i)); } return nx; } protected int positionOf(final Object k) {
public OrderedSet<K> keysAt(int... positions) { if(keys == null || positions == null || positions.length <= 0) return new OrderedSet<K>(); OrderedSet<K> ks = new OrderedSet<>(positions.length); for(int i = 0; i < positions.length; i++) { ks.add(keyAt(positions[i])); } return ks; } public OrderedSet<K> keysAt(IntVLA positions)
public OrderedSet<K> keysAt(IntVLA positions) { if(keys == null || positions == null || positions.size <= 0) return new OrderedSet<K>(); OrderedSet<K> ks = new OrderedSet<>(positions.size); for(int i = 0; i < positions.size; i++) { ks.add(keyAt(positions.get(i))); } return ks; }