No código abaixo, no it.remove() remove o item do Iterator. Como ele faz para remover o item do objeto lista?
public void removeEmpresa(Integer id) {
Iterator<Empresa> it = lista.iterator();
while(it.hasNext()) {
Empresa emp = it.next();
if(emp.getId() == id ) {
it.remove();
}
}
}