R
Russ Perry Jr
Is it safe to "nest" iterators? In other words, if I'm iterating over
a Vector, and in the middle of doing that (specifically after removing
an element) I iterate over the same Vector to find something out in
the middle if the iterator loop, is that okay?
It goes something like this:
private Vector listOfSessions; // vector of SessionObjects
public boolean isLoginNameStillOnList(String loginNameToCheck)
{
boolean result = false;
for (Iterator iter = listOfSessions.iterator();
iter.hasNext()
{
if (((SessionObject) iter.next()).getLoginName().
equalsIgnoreCase(loginNameToCheck))
{
result = true;
break;
}
}
return result;
}
public boolean removeSessionFromList(String sessionID)
{
boolean result = false;
for (Iterator iter = listOfSessions.iterator();
iter.hasNext()
{
SessionObject sessionObject = (SessionObject) iter.next();
if (sessionObject.getSessionID().equalsIgnoreCase(sessionID))
{
/* ignore return value */ iter.remove();
// check if there are no other instances of loginName
// in the list...
if (!isLoginNameStillOnList(sessionObject.getLoginName()))
{
// ...if not, log them out of database entirely
logoutFromDatabase(sessionObject);
}
result = true;
break;
}
}
return result;
}
a Vector, and in the middle of doing that (specifically after removing
an element) I iterate over the same Vector to find something out in
the middle if the iterator loop, is that okay?
It goes something like this:
private Vector listOfSessions; // vector of SessionObjects
public boolean isLoginNameStillOnList(String loginNameToCheck)
{
boolean result = false;
for (Iterator iter = listOfSessions.iterator();
iter.hasNext()
{
if (((SessionObject) iter.next()).getLoginName().
equalsIgnoreCase(loginNameToCheck))
{
result = true;
break;
}
}
return result;
}
public boolean removeSessionFromList(String sessionID)
{
boolean result = false;
for (Iterator iter = listOfSessions.iterator();
iter.hasNext()
{
SessionObject sessionObject = (SessionObject) iter.next();
if (sessionObject.getSessionID().equalsIgnoreCase(sessionID))
{
/* ignore return value */ iter.remove();
// check if there are no other instances of loginName
// in the list...
if (!isLoginNameStillOnList(sessionObject.getLoginName()))
{
// ...if not, log them out of database entirely
logoutFromDatabase(sessionObject);
}
result = true;
break;
}
}
return result;
}