¿Por Iterators.size () haciendo que el iterador vacío?

Nambi_0915:
public static void main(String args[]) throws JSONException {
    JSONObject json = new JSONObject();
    json.put("name", "abcgdj");
    json.put("no", "1234");
    json.put("contact", "6748356");
    Iterator<?> keys = json.keys();
    System.err.println(Iterators.size(keys));
    System.err.println(Iterators.size(keys));
}

En este código, después de ejecutarse Iterators.size(keys), el iterador se está convirtiendo en vacío y para la segunda sentencia print, lo va a devolver 0.

El size()método es bajo el paquete com.google.common.collect.iterators.So He mirado el código de Iterators.size () function.It era,

 public static int size(Iterator<?> iterator) {
    long count = 0L;
    while (iterator.hasNext()) {
    iterator.next();
    count++;
  }
  return Ints.saturatedCast(count);
}

Así que tengo una duda de que cómo el iterador keysse vacía. si es llamada por referencia?

¿Puede alguien explicar lo que está pasando en el interior tamaño de la función ()

Andy Turner:
System.err.println(Iterators.size(keys));

Como se dice en el Javadoc , esto agota el keysiterador: sólo sigue llamando next()hasta que hasNext()es falsa.

Entonces no se restablece antes de llamar

System.err.println(Iterators.size(keys));

de nuevo (porque no hay manera de restablecer un iterador). Así que hasNext()vuelve inmediatamente falsa, por lo que no hay más elementos para que se lea. Por lo tanto el tamaño es cero.

Que había necesidad de reasignar la variable con un nuevo iterador:

Iterator<?> keys = json.keys();
System.err.println(Iterators.size(keys));

keys = json.keys();  //

System.err.println(Iterators.size(keys));

o no declarar una variable (ya que es efectiva (*) inútil después):

System.err.println(Iterators.size(json.keys()));
System.err.println(Iterators.size(json.keys()));    

(*) Se puede utilizar para eliminar el último elemento del iterador.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=172276&siteId=1
Recomendado
Clasificación