directorio
iterador
Los datos sólo una vez por ciclo positivo de la producción.
Los métodos más comunes:
método | explicación |
---|---|
hasNext public boolean () | Cuando se determina si los datos son un valor nulo |
por defecto quitar vacío () | Borrar datos (difícil de usar) |
E pública siguiente () | Obtener los datos actuales |
Ejemplo:
List<String> list = new ArrayList<>();
list.add("1");
list.add("3");
list.add("5");
list.add("7");
list.add("9");
list.add("2");
list.add("4");
list.add("6");
list.add("8");
list.add("10");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) { //判断下一个数据是否为空
String value = iterator.next(); //获取当前数据
if ("3".equals(value)) {
iterator.remove(); //删除数据,不会影响节点
} else {
System.out.println(value);
}
}
resultados:
1
5
7
9
2
4
6
8
10
Entre la lista, Conjunto, Colección, Lista tiene un método get (), puede obtener los datos de acuerdo con el índice.
Se requiere usar el método get () cada vez que el índice de búsqueda de los datos de salida, tiempo de complejidad de (n + 1) n, el rendimiento no es fuerte: Lista de método get salida iteradores () .
ListIterator (salida iterador bidireccional)
Los datos pueden ser secuencialmente de salida, los datos de salida pueden ser inversa.
ListIterator en presencia de un funcionamiento inverso del puntero interna deseada de salida, A alcanza puntero de datos deben entonces, en la salida puede ser invertida, de modo que desee para invertir la salida, la salida debe ser positivo.
Los métodos más comunes:
método | explicación |
---|---|
hasPrevious public boolean () | Una determinación de si los datos está vacía |
E pública anterior (); | Obtener datos |
Ejemplo:
List<String> list = new ArrayList<>();
list.add("a");
list.add("c");
list.add("b");
list.add("m");
list.add("a");
list.add("d");
list.add("g");
list.add("j");
list.add("l");
list.add("q");
ListIterator<String> listIterator = list.listIterator();
System.out.print("正向输出:");
while (listIterator.hasNext()) {
System.out.print(listIterator.next() + "、");
}
System.out.print("\n反向输出:");
while (listIterator.hasPrevious()) {
System.out.print(listIterator.previous() + "、");
}
resultados:
正向输出:a、c、b、m、a、d、g、j、l、q、
反向输出:q、l、j、g、d、a、m、b、c、a、
Enumeración
salida iteraciones temprana es ahora sólo Vector puede ser utilizado.
Los métodos más comunes:
método | explicación |
---|---|
hasMoreElements booleanos públicos () | Cuando se determina si los datos son un valor nulo |
E pública nextElement () | Obtener los datos actuales |
Ejemplo:
Vector<String> vector = new Vector<>();
vector.add("a");
vector.add("b");
vector.add("c");
vector.add("d");
vector.add("e");
vector.add("f");
Enumeration<String> enumeration = vector.elements();
while(enumeration.hasMoreElements()){
System.out.println(enumeration.nextElement());
}
resultados:
a
b
c
d
e
f
para cada
salida del bucle foreach, cuando el objeto de la clase a una salida personalizado, debe implementar la interfaz Iterable, devuelve una instancia de objeto iterador iterador del método reemplazado en la interfaz deben ser implementadas dentro de la clase interna Iterator definido.
Ejemplo: salida de clase personalizada
public class Demo01 {
public static void main(String[] args) {
Ball ball = new Ball();
for (String b:ball) {
System.out.print(b+"、");
}
}
}
class Ball implements Iterable<String>{
private String[] brand = new String[]{"Hello","World"};
private int footer;
@Override
public Iterator<String> iterator() {
return new BallIter();
}
private class BallIter implements Iterator<String>{
@Override
public boolean hasNext() {
//表示数组存在数据
return Ball.this.footer < Ball.this.brand.length;
}
@Override
public String next() {
//返回数据
return brand[Ball.this.footer++];
}
}
}
resultados:
Hello、World、
Ejemplo: lista de salida de encargo foreach
public class Demo02 {
public static void main(String[] args) {
ILink<String> link = new LinkImpl<>();
link.add("1");
link.add("2");
for (String str:link) {
System.out.println(str+"、");
}
}
}
interface ILink<T> extends Iterable<T>{
/**
*链表数据增加
* @param data 数据
*/
public void add(T data);
}
class LinkImpl<T> implements ILink<T>{
private Node root;
private Node<T> last;
private Node currentNode;
@Override
public Iterator<T> iterator() {
this.currentNode = this.root;
return new LinkIter<>();
}
private static class Node<T>{
private T data;
private Node next;
public Node() {
}
public Node(T data) {
this.data = data;
}
}
@Override
public void add(T data) {
Node<T> node = new Node<>(data);
if(this.root == null){
this.root = node;
}else{
this.last.next = node;
}
this.last = node;
}
private class LinkIter<T> implements Iterator<T>{
@Override
public boolean hasNext() {
return LinkImpl.this.currentNode!=null;
}
@Override
public T next() {
T data = (T) LinkImpl.this.currentNode.data;
LinkImpl.this.currentNode = LinkImpl.this.currentNode.next;
return data;
}
}
}
resultados:
1、
2、