Reuse of Iterator for knownlists.

This commit is contained in:
MobiusDev
2016-05-02 09:42:50 +00:00
parent 056c45749d
commit 1b52ef2637
2 changed files with 21 additions and 7 deletions

View File

@ -16,6 +16,7 @@
*/ */
package com.l2jmobius.gameserver.model.actor.knownlist; package com.l2jmobius.gameserver.model.actor.knownlist;
import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -122,25 +123,30 @@ public class CharKnownList extends ObjectKnownList
{ {
if (!fullCheck) if (!fullCheck)
{ {
for (L2PcInstance player : getKnownPlayers().values()) final Iterator<L2PcInstance> pIter = getKnownPlayers().values().iterator();
while (pIter.hasNext())
{ {
final L2PcInstance player = pIter.next();
if (player == null) if (player == null)
{ {
removeKnownObject(player, true); pIter.remove();
} }
else if (!player.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(player), getActiveObject(), player, true)) else if (!player.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(player), getActiveObject(), player, true))
{ {
pIter.remove();
removeKnownObject(player, true); removeKnownObject(player, true);
getKnownRelations().remove(player.getObjectId()); getKnownRelations().remove(player.getObjectId());
getKnownObjects().remove(player.getObjectId()); getKnownObjects().remove(player.getObjectId());
} }
} }
for (L2Summon summon : getKnownSummons().values()) final Iterator<L2Summon> sIter = getKnownSummons().values().iterator();
while (sIter.hasNext())
{ {
final L2Summon summon = sIter.next();
if (summon == null) if (summon == null)
{ {
removeKnownObject(summon, true); sIter.remove();
} }
else if (getActiveChar().isPlayer() && (summon.getOwner() == getActiveChar())) else if (getActiveChar().isPlayer() && (summon.getOwner() == getActiveChar()))
{ {
@ -148,6 +154,7 @@ public class CharKnownList extends ObjectKnownList
} }
else if (!summon.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(summon), getActiveObject(), summon, true)) else if (!summon.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(summon), getActiveObject(), summon, true))
{ {
sIter.remove();
removeKnownObject(summon, true); removeKnownObject(summon, true);
getKnownObjects().remove(summon.getObjectId()); getKnownObjects().remove(summon.getObjectId());
} }
@ -156,14 +163,17 @@ public class CharKnownList extends ObjectKnownList
return; return;
} }
// Go through knownObjects // Go through knownObjects
for (L2Object object : getKnownObjects().values()) final Iterator<L2Object> oIter = getKnownObjects().values().iterator();
while (oIter.hasNext())
{ {
final L2Object object = oIter.next();
if (object == null) if (object == null)
{ {
removeKnownObject(object, true); oIter.remove();
} }
else if (!object.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(object), getActiveObject(), object, true)) else if (!object.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(object), getActiveObject(), object, true))
{ {
oIter.remove();
removeKnownObject(object, true); removeKnownObject(object, true);
if (object.isPlayer()) if (object.isPlayer())

View File

@ -16,6 +16,7 @@
*/ */
package com.l2jmobius.gameserver.model.actor.knownlist; package com.l2jmobius.gameserver.model.actor.knownlist;
import java.util.Iterator;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -158,8 +159,10 @@ public class ObjectKnownList
*/ */
public void forgetObjects(boolean fullCheck) public void forgetObjects(boolean fullCheck)
{ {
for (L2Object object : getKnownObjects().values()) final Iterator<L2Object> oIter = getKnownObjects().values().iterator();
while (oIter.hasNext())
{ {
final L2Object object = oIter.next();
if (!fullCheck && !object.isPlayable()) if (!fullCheck && !object.isPlayable())
{ {
continue; continue;
@ -168,6 +171,7 @@ public class ObjectKnownList
// Remove all objects invisible or too far // Remove all objects invisible or too far
if (!object.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(object), getActiveObject(), object, true)) if (!object.isVisible() || !Util.checkIfInShortRadius(getDistanceToForgetObject(object), getActiveObject(), object, true))
{ {
oIter.remove();
removeKnownObject(object, true); removeKnownObject(object, true);
} }
} }