java知识整理-----集合

Iterator接口:遍历Collection集合中的元素,称为迭代器。

           boolean hasNext();

           Object next();

           void remove();

           用Iterator对集合进行迭代的时候,如果同时又用集合对象的方法操作集合中的元素,会发生ConcurrentModificationException异常,所以在迭代的时候只能用迭代器的方法操作元素,可是Iterator方法有限,只能对元素进行判断,取出和移除操作,如果想要进行其他操作,如添加,修改等就需要使用其子接口:ListIterator.

          |------ListIterator:在Iterator上增加额外方法,支持双向输出

             void set(E);

             void add(E);

             boolean hasPrevious();    返回该迭代器关联集合是否还有上一个元素;

             Object previous();    返回该迭代器的上一个元素;

Collection

           |-----List:元素是有序的,元素可以重复存在,因为该集合体系有索引,判断元素是否相同,依据是元素的equals方法。

                  |------ArrayList:底层的数据结构是数组;特点:查询速度快,增删稍慢;线程不同步

                  |------LinkedList:底层的数据结构是链表;特点:增删速度快,查询稍慢;

                  |------Vector:底层是数组数据结构;线程同步,效率低;被ArrayList替代

                  ArrayList和Vector类都是基于数组实现的List类,Vector比较古老,被ArrayList取代了;ArrayList是线程不安全的,而Vector是线程安全的,但是还是推荐使用ArrayList;

                  获取线程安全的ArrayList对象:Collections类中的方法:static List synchronizedList(List list);返回线程安全的列表。

           |-----Set:元素是无序的(存入和取出的顺序不一定一致),元素不可以重复

                 |------HashSet:底层数据结构是哈希表,线程不同步。

                         HashSet保证元素的唯一性是通过hashCode和equals方法来完成,如果元素的HashCode值相同,会判断equals是否为true,如果元素的HashCode值不同,不会调用                      equals进行比较。

                 |------TreeSet:底层数据结构是二叉树,可以对Set集合中的元素进行排序

                         1、保证元素唯一性的依据是compareTo方法

                         2、排序-----自然排序

                               让元素自身具备比较性,元素需要实现Comparable接口,覆盖compareTo方法

                         3、排序-----比较器排序

                              当元素不具备比较性,或者具备的比较性不是所需要的,这是可以自己定义比较器,实现Comparator接口,覆盖compare方法,然后将比较器对象作为参数传递                            给TreeSet集合的构造函数。

                               

Map

          |------Hashtable:底层是哈希表数据结构,不可以存入null键null值,线程同步,效率低

          |------HashMap:底层是哈希表数据结构,允许使用null键和null值,线程不同步,效率高

          |------TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合的键进行排序

          遍历Map集合两种方式:

          Map<Integer,String> m = new HashMap<Integer,String>();

          m.put(1,"A");

          m.put(2,"B");

          m.put(3,"C");

          //第一种方式

          Set s = m.entrySet();

          Iterator it = s.iterator();

          while(it.hasNext()){

                 Map.Entry en = (Entry)it.next();

                 System.out.println(en.getKey()+":"+en.getValue());

          }

        //第二种方式

        s = m.keySet();

        it = s.iterator();

        while(it.hasNext()){

               int i = (int)it.next();

               System.out.println(i+":"+m.get(i));

        }

posted @ 2018-04-15 21:52  残酷游戏  阅读(138)  评论(0编辑  收藏  举报