---
title: "Map hjälp"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/73784-map-hjälp"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "Viktor"
published: "2003-04-11T11:49:15.000Z"
updated: "2003-04-12T08:23:37.000Z"
replies: 3
views: 228
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/73784-map-hjälp"
---

# Map hjälp

## #1 — Viktor, 2003-04-11T11:49Z

Jag har följande kod i min connectionpool

```
long curTime=System.currentTimeMillis();
Connection conn=null;
ConnectionInfo ci=null;
Iterator iter=usedConnections.keySet().iterator();

while(iter.hasNext())
{
	conn=(Connection)iter.next(); 
	ci=(ConnectionInfo)usedConnections.get(conn);
	if((ci.getTime()+cleanInterval)<curTime)
	{
		try
		{
			usedConnections.remove(conn);
			if(ci.getExtra()==false)
				freeConnections.add(newConnection());
			conn.close();
		}
		catch(SQLException sql)
		{
		}
	}
}
```

problemet med den är att när jag har kört en "usedConnections.remove(conn);" samtidigt som jag kör loopen som går igenom alla objekt i "usedConnections" så får jag detta fel medelande

```
java.util.ConcurrentModificationException
        at java.util.HashMap$HashIterator.nextEntry(HashMap.java:762)
        at java.util.HashMap$KeyIterator.next(HashMap.java:798)
        at com.vgsoftware.util.database.DBConnectionPool.clean(DBConnectionPool.
java:272)
        at com.vgsoftware.util.database.Cleaner.run(DBConnectionPool.java:330)
```

Är det någon som kan hjälpa till och föröska hitta ett bättre sätt att bygga loppen på? Jag har tänkt och testat lite men kan inte komma på något sätt :(

/Viktor

Permalänk: https://www.webforum.nu/p/73784

## #2 — phonkworks, 2003-04-11T15:09Z

Du kan kanske samla de connections som ska tas bort i en ArrayList och köra remove på dom efter "usedConnections" loopen är klar.

mvh
phonk

Permalänk: https://www.webforum.nu/p/1008574

## #3 — sgtpepper, 2003-04-12T00:45Z

En HashMap har s.k fail-fast iterators, det betyder i princip att itereringen dör om den underliggande collectionen modifieras under iterationen.

Det du borde göra är istället att använda den remove()-metod som finns på iterator-objektet vilken i sin tur tar bort objektet från den underliggande collectionen.

Din kod bör alltså se ut så här:

```
long curTime=System.currentTimeMillis();
Connection conn=null;
ConnectionInfo ci=null;
Iterator iter=usedConnections.keySet().iterator();

while(iter.hasNext())
{
	conn=(Connection)iter.next(); 
	ci=(ConnectionInfo)usedConnections.get(conn);
	if((ci.getTime()+cleanInterval)<curTime)
	{
		try
		{
			[b][red]iter.remove();[/red][/b]
			if(ci.getExtra()==false)
				freeConnections.add(newConnection());
			conn.close();
		}
		catch(SQLException sql)
		{
		}
	}
}
```

Jag har ingen möjlighet att prova detta just nu, men jag är hyffsat säker på att det är det som är problemet, så testa och se om det funkar!

Permalänk: https://www.webforum.nu/p/1008856

## #4 — Viktor, 2003-04-12T08:23Z

Provat nu och det fungerar, tackar!

/Viktor

Permalänk: https://www.webforum.nu/p/1008893

---

Tråden på webben: https://www.webforum.nu/amne/java/73784-map-hjälp
