Вот мысль.Возможно, создайте класс карты, размер которого ограничен 10 элементами, и скопируйте / создайте свой ограниченный сегмент карты следующим образом:
package main;
import java.util.LinkedHashMap;
import java.util.Map;
import com.google.common.collect.Maps;
public class HashMap10<K, V> extends LinkedHashMap<K, V> {
private static final long serialVersionUID = -4943383947326287590L;
static Map<Integer, String> x = Maps.newHashMap();
public HashMap10() {
super();
}
public HashMap10(int initialCapacity, float loadFactor, boolean accessOrder) {
super(initialCapacity, loadFactor, accessOrder);
}
public HashMap10(int initialCapacity, float loadFactor) {
super(initialCapacity, loadFactor);
}
public HashMap10(int initialCapacity) {
super(initialCapacity);
}
public HashMap10(Map<? extends K, ? extends V> m) {
putAll(m);
}
@Override
public V put(K key, V value) {
if (this.size() == 10) {
return null;
}
return super.put(key, value);
}
@Override
public void putAll(Map<? extends K, ? extends V> m) {
for (java.util.Map.Entry<? extends K, ? extends V> x : m.entrySet()) {
put(x.getKey(), x.getValue());
}
}
}
Протестируйте его, добавив 100 элементов на карту ограниченного размера, один раз несколькимивызовы put () и один раз с помощью конструктора:
package main;
import java.util.HashMap;
import java.util.Map.Entry;
public class TestIt {
/**
* @param args
*/
public static void main(String[] args) {
HashMap10<Integer, String> map10 = new HashMap10<Integer, String>();
for (int i = 1; i < 99; i++) {
map10.put(i, Integer.toString(i + 100));
}
for (Entry<Integer, String> x : map10.entrySet()) {
System.out.println(x.getKey() + "->" + x.getValue());
}
System.out.println("");
System.out.println("");
HashMap<Integer, String> mapUnlimited = new HashMap<Integer, String>();
for (int i = 1; i < 99; i++) {
mapUnlimited.put(i, Integer.toString(i + 200));
}
HashMap10<Integer, String> anotherMap10 = new HashMap10<Integer, String>(
mapUnlimited);
for (Entry<Integer, String> x : anotherMap10.entrySet()) {
System.out.println(x.getKey() + "->" + x.getValue());
}
}
}
Дамп карт, и у вас есть только карты из 10 элементов, независимо от того, были ли вы добавлены элементы по одному или построили карту сконструктор:
1-> 1012-> 1023-> 1034-> 1045-> 1056-> 1067-> 1078-> 1089-> 10910-> 1101-> 2012-> 2023-> 2034-> 2045-> 2056-> 2067-> 2078-> 2089-> 20910-> 210
Я не тратил время на защитное программирование, проверку на нулевые значения и тому подобное.Идея в том, что я не знаю и не волнуюсь, какая у тебя оригинальная карта.Связанная карта.Древовидная карта.Обычная карта.Независимо от порядка, который он возвращает, элементы определяют, что вы подразумеваете под «первыми 10 элементами», и мой класс карты будет хранить только эти первые 10 и игнорировать любые последующие.Теперь у вас есть первые 10, что бы это ни значило для вашей карты.