@Test public void iterateOverMapEntries() { HazelcastClient hClient = getHazelcastClient(); IMap<String, String> map = hClient.getMap("iterateOverMapEntries"); map.put("1", "A"); map.put("2", "B"); map.put("3", "C"); Set<Entry<String, String>> entrySet = map.entrySet(); assertEquals(3, entrySet.size()); Set<String> keySet = map.keySet(); for (Entry<String, String> entry : entrySet) { assertTrue(keySet.contains(entry.getKey())); assertEquals(entry.getValue(), map.get(entry.getKey())); } Iterator<Entry<String, String>> it = entrySet.iterator(); for (String key : keySet) { MapEntry mapEntry = map.getMapEntry(key); assertEquals(1, mapEntry.getHits()); } while (it.hasNext()) { it.next(); it.remove(); } assertTrue(map.isEmpty()); }
public V put(K key, V value) { V oldValue = null; int index = Math.abs(key.hashCode()) % SIZE; if (buckets[index] == null) buckets[index] = new ArrayList<MapEntry<K, V>>(); ArrayList<MapEntry<K, V>> bucket = buckets[index]; MapEntry<K, V> pair = new MapEntry<K, V>(key, value); boolean found = false; ListIterator<MapEntry<K, V>> it = bucket.listIterator(); // int probes=0; while (it.hasNext()) { // probes++; MapEntry<K, V> iPair = it.next(); // if(!iPair.getKey().equals(key)) System.out.println("HashCode collision on put, have // key:"+key+" hascode:"+key.hashCode()+" found key:"+iPair.getKey()+" hashcode:"+ // iPair.getKey().hashCode()); if (iPair.getKey().equals(key)) { oldValue = iPair.getValue(); it.set(pair); // Replace old with new found = true; break; } } // System.out.println("put() probes for key "+ key+" :"+probes); if (!found) buckets[index].add(pair); return oldValue; }
@Override public V remove(Object key) { int index = Math.abs(key.hashCode()) % SIZE; if (buckets[index] == null) return null; for (MapEntry<K, V> iPair : buckets[index]) { if (iPair.getKey().equals(key)) { buckets[index].remove(iPair); return iPair.getValue(); } } return null; }
public V get(Object key) { int index = Math.abs(key.hashCode()) % SIZE; if (buckets[index] == null) return null; // int probes=0; for (MapEntry<K, V> iPair : buckets[index]) { // probes++; // if(!iPair.getKey().equals(key)) System.out.println("HashCode collision on put, have // key:"+key+" hascode:"+key.hashCode()+" foune key:"+iPair.getKey()+" hashcode:"+ // iPair.getKey().hashCode()); if (iPair.getKey().equals(key)) return iPair.getValue(); } // System.out.println("get() probes for key "+ key+" :"+probes); return null; }
@Test public void getMapEntry() { HazelcastClient hClient = getHazelcastClient(); IMap map = hClient.getMap("getMapEntry"); assertNull(map.put("a", "b")); map.get("a"); map.get("a"); MapEntry<String, String> entry = map.getMapEntry("a"); assertEquals("a", entry.getKey()); assertEquals("b", entry.getValue()); assertEquals(2, entry.getHits()); assertEquals("b", entry.getValue()); assertEquals("b", entry.setValue("c")); assertEquals("c", map.get("a")); assertEquals("c", entry.getValue()); }