泛型和容器二

来源:互联网 发布:otsu算法 编辑:程序博客网 时间:2024/06/05 02:48

        由于昨晚只讲到迭代,今晚继续,在Iterator中还有ListIterator这个更加强大的迭代器子类型,相对于Iterator只能向前移动,它是双向移动!并可以通过ListIterator(n);产生一个指向索引的ListIterator.

在LinkedList中还添加了使其作用于栈,队列,双端队列的方法.在这里,注意,getFirst()和peek(),removeFirst()和poll()是有区别的,getFirst()和removeFirst()在列表为空时抛出异常,而peek()和poll()则是返回null值.

下面关于栈,之前我是模糊的,因为接触少的原因吧,但是要明白栈是后进先出的原则,它常用的方法,push(),peek(),pop()的区别,push()压栈,即把元素放入,peek()和pop()都是返回栈顶元素,区别是pop()是直接移除栈顶元素了.

接着对昨天set进行补充,set具有和collection完全一样的接口,实际上set就是collection,只是行为不同,在set中通过复杂的判断使其不会存在重复元素,其中在存储过程中,HashSet出于速度的原因使用了散列函数,TreeSet用了红-黑树数据结构,而LinkedHashSet也是用了三列,但是看起来它使用了链表来维护插入顺序.

最后,有关map,由于其特殊的存储方式(键值对,并且键是唯一性),将给他更加强大的功能,在日后的编程中有关多维数组,对象集合等等一系列内容都可以用map解决掉.下面给出一个书上有趣内容:

public class MapTest{

   public static void main(String[] args){

      Random rd = new Random(6);

      Map<Integer,Integer> mm = new HashMap<Integer,Integer>();

      for(int i = 0; i<10000,i++){

      int n = rd.nextInt(22);

      Integer m = mm.get(n);

      mm.put(n,m==null?1:m+1);

      }

     System.out.println(mm);

   }

}

程序中使用了int的包装类型Integer,并发生了对Integer的包装和拆包.有关包装和拆包之后再说,有兴趣的可以百度了解.

原创粉丝点击