zoukankan      html  css  js  c++  java
  • linkin大话数据结构--Collection和Iterator

    linkin大话数据结构--Collection和Iterator


    Java 集合就像一种容器,可以把多个对象的引用放入容器中。Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。Java 集合可分为 Set、List 和 Map 三种体系
    1,Set:无序、不可重复的集合
    2,List:有序,可重复的集合
    3,Map:具有映射关系的集合

    在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,把所有对象都当成 Object 类型处理;从 Java5 增加了泛型以后,Java 集合可以记住容器中对象的数据类型


    • 为什么出现集合类?

    面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就要对对象进行存储,集合和数组就是存储对象最常用的两种方式。那么问题来了:数组和集合类同是容器,有何不同?

    1,数组中可以存储任意数据类型,集合只能存储对象。

    2,数组能装也只能装同一种数据类型的数据,而且长度是固定的;集合只用于存储对象,可以装不同类型的对象,并且长度是可变的。


    Java集合类主要由两个接口派生出来:Collection,Map这2个接口。

    注意:在“集合框架”中,Map 和Collection 没有任何亲缘关系。     Map的典型应用是访问按关键字存储的值。它支持一系列集合操作,但操作的是键-值对,而不是独立的元素。    因此 Map 需要支持 get() 和 put() 的基本操作,而 Set 不需要。 

    • Collection:   集合中每一个元素为一个对象,这个接口将这些对象组织在一起,形成一维结构。最常用的几个接口如下:

    1,Set:不能存放重复对象,无序

    HashSet:      用 hashCode() 加 equals() 比较是否重复
          SortedSet:    会按照数字将元素排列,为“可排序集合”默认升序
          TreeSet:      按二叉树排序(效率非常高); 按Comparable接口的 compareTo() 比较是否重复

    2,List:可存放重复对象,有序

    ArrayList:    数组。查询快,增删慢。(List是链表)
          Vector:       线程安全,但效率很差(现实中基本不用)

    3,Queue:队列:先进先出

    PriorityQueue:   优先队列:元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序

    4,map:其中每一个元素都是一个键值对( Key-Value)。键不能重复。可有一个空键。

    SortedMap:    根据 key 值排序的 Map。
          HashMap:      用 hashCode() 加 equals() 比较是否重复



    Collection接口常用方法:
    boolean add(Object o):该方法用于向集合里面添加一个元素,若集合对象被添加操作改变了,返回true.
    boolean addAll(Collection c):把集合c里面的所有元素添加到指定集合里面去,如果集合对象被添加操作改变了返回true.
    void clear():清除集合里面的所有元素,将集合长度变为0。
    boolean contains(Object o):返回集合里是否包含指定的元素。
    boolean containsAll(Collection c):返回集合里是否包含集合c内所有的元素。
    boolean isEmpty():返回集合是否为空(长度是否为0)。
    Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素。
    boolean remove(Object o):删除集合中指定元素o。
    boolean removeAll(Collection c):从集合中删除集合c里面的元素。若删除一个或以上返回true。
    boolean retainAll(Collection c):从集合中删除集合c里不包含的元素。
    int size():得到集合元素的个数。

    Object[] toArray():把集合转成一个数组,所有集合元素编程数组元素。

    关于集合的操作有:增加、删除、遍历、排序。增加和删除不做赘述,现在就开始整理遍历最常用的操作,关于排序在后面有专门做整理。

    1,使用 Iterator 接口遍历集合元素。Enumeration 接口是 Iterator 迭代器的 “古老版本”。

    2,使用 foreach 循环遍历集合元素。Java 5 提供了 foreach 循环迭代访问 Collection。

    关于2者:iterator对于集合才能用,for不同,只要是循环都可用。代码如下:

    import java.util.Collection;
    import java.util.HashSet;
    import java.util.Iterator;
    
    /**
     *
     * @version 1L
     * @author  LinkinPark 
     * @since   2014-11-10
     * @motto   梦似烟花心似水,同学少年不言情
     * @desc    ^Iterator仅仅用来遍历集合,本身并不提供承装对象的能力,如果需要创建Iterator对象,必须要有一个被迭代的对象, 没有集合的Iterator仿佛无本之木,没有存在的价值,
     *           在迭代过程中,Iterator并不是把集合元素的本身传给迭代变量,而是把集合元素的值传给了迭代变量,所以修改迭代变量的值对集合元素本身没有任何的影响。
     */
    public class Linkin 
    {
        public static void main(String[] args) 
        {
            //创建一个集合
            Collection<String> names = new HashSet<String>();
            names.add("LinkinPark");
            names.add("Binger");
            //获得上面set对应的迭代器
            Iterator<String> it = names.iterator();
            while(it.hasNext())
            {
                String name = it.next();
                System.out.println(name);
                if("LinkinPark".equals(name)){
                    //当使用Iterator访问Collection集合元素时,集合里面的元素不能改变,必须要使用Iterator的remove方法才行。使用增强的for循环也是一样
                    //names.remove(name);  //java.util.ConcurrentModificationException
                    it.remove();
                }
                //对name变量赋值,不会改变集合元素本身
                name = "LinkinPark...";
            }
            System.out.println(names);
            //使用增强的for循环。
            for (String string : names) 
            {
                System.out.println(string);
            }
        }
    
    }


    以下是Iterator接口的说明:

    Iterator 接口主要用于遍历 Collection 集合中的元素,Iterator 对象也被称为迭代器。Iterator 接口隐藏了各种 Collection 实现类的底层细节,向应用程序提供了遍历 Collection 集合元素的统一编程接口

    Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。Iterator主要遍历Collection集合中的元素,也有称为迭代器或迭代精灵。

    boolean hasNext():若被迭代的集合元素还没有被遍历,返回true。

    Object  next():返回集合的下一个元素。迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。

    void remove():删除集合上一次next()方法返回的元素。(若集合中有多个相同的元素,都可以删掉)。









  • 相关阅读:
    用OKR让你的员工嗨起来
    用数据让我们的OKR变得“冷酷”却更有价值
    好的想法只是OKR的开始创业者谨记
    “OKR播种机”JOHN DOERR–目标是对抗纷乱思绪的一针疫苗
    用OKR提升员工的执行力
    OKR的两个基本原则
    《OKR工作法》| 一次说太多等于什么都没说
    《OKR工作法》–让所有人承担自己的职责
    《OKR工作法》——打造一支专一的团队
    Oracle wm_concat()函数的实际运用
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5233145.html
Copyright © 2011-2022 走看看