迭代器
神马是迭代器?
迭代器是一个对象,它的工作是遍历并选择序列中的对象,而客户端程序员不需要关系其底层的结构,是一种轻量级的对象。Java中所有的容器对象都实现了Iterable接口,该接口只有一个方法。
Iterator<T> iterator() // 返回一个在一组 T 类型的元素上进行迭代的迭代器。
这里返回的Iterator对象就是迭代器。其实际也是一个接口,内部只有三个方法
boolean hasNext() //如果仍有元素可以迭代,则返回 true。 E next() //返回迭代的下一个元素。 void remove() //从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。 //如果要调用remove其之前必须先调用next
ListIterator
普通 的Iterator只能进行单向的向前移动,如果想要双向移动,可以使用ListIterator。通过调用listIterator()方法可以获取一个listIterator对象。
Java中的常用容器
set
set中不保存相同的元素(通过对象的eaqul()方法判断是否相同),当你向Set添加多个相同的元素时,只会添加一个进去。
Set<String> set=new HashSet<String>(); for(int i=0;i<10;i++){ set.add(new String("尼玛")); } Iterator<String> iterator=set.iterator(); while(iterator.hasNext()){ String str=iterator.next(); System.out.println(str); } //结果只打印了一行 尼玛
HashSet的输出是没有顺序而言的,内部采用Hash散列的方式存储数据。如果想要存储的数有序排列,可以使用TreeSet,其数据存储在红-黑树数据结构之中,插入的数据会按照一定顺序排序。
Map
map可以通过保存键值对的形式保存数据。是一种很强大的数据结构。其键与值可以是各种数据类型(包括map),重复的key方法,则后让放入的会覆盖前面的(通过对对象的equals()方法判断。)
Map<String,Integer> map=new HashMap<>(); for(int i=0;i<10000;i++){ map.put(new String("wifi"), i); } System.out.println(map); //结果输出为{wifi=9999}
Queue(接口)
队列是一个先进先出的容器,其内部元素可重复 , LinkedList是其一个典型的实现类。其常用方法如下:
boolean add(E e) //将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。 E element() //获取,但是不移除此队列的头。 boolean offer(E e) //将指定的元素插入此队列(如果立即可行且不会违反容量限制),当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而只是抛出一个异常。 E peek() // 获取但不移除此队列的头;如果此队列为空,则返回 null。 E poll() //获取并移除此队列的头,如果此队列为空,则返回 null。 E remove() //获取并移除此队列的头。
其另一个重要的实现类是PriorityQueue,其弹出的下一个元素是优先级最高的那个元素(不再是先进先出)
PriorityQueue<Integer> queue=new PriorityQueue<>(); Random random=new Random(); for(int i=0;i<10;i++){ queue.add(random.nextInt(20)); } while(!queue.isEmpty()){ System.out.print(queue.poll()+" "); } //结果输出为 :4 6 7 7 10 11 14 16 18 19