List集合框架

集合框架的概述

1、集合框架(简介、Collection方法、迭代器)

  • 简介

    集合框架的由来:数据多了用对象进行存储,对象多了用集合来进行存储。
    存储数据的方式(数据结构)各有不同,所以存储的容器也就有多种,从而形成了集合框架这一体系。

  • 案列分析
    下图所示,假如圆形是装的是流体性的容器,方形装的是糖果性的容器,图右下三个圆形容器抽取至List圆形容器,图左下三个方形容器抽取至set方形容器 ,由图可知它们的存储规则是一样的,都是由下往上存储的,且他们的基本功能都是存储东西,List和set再往上抽取他们的共线功能就是存储,也就是今天所讲的集合的起源
    在这里插入图片描述

  • Collection方法

    其实大多数方法都是对现实中的一些描述。
    在这里插入图片描述
    如想更深入的了解提供以下网站:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

  • 迭代器
    解释

    迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。
    迭代器提供一些基本操作符:*、++、==、!=、=。这些操作和C/C++“操作array元素”时的指针接口一致。不同之处在于,迭代器是个所谓的复杂的指针,具有遍历复杂数据结构的能力。其下层运行机制取决于其所遍历的数据结构。因此,每一种容器型都必须提供自己的迭代器。事实上每一种容器都将其迭代器以嵌套的方式定义于内部。因此各种迭代器的接口相同,型号却不同。这直接导出了泛型程序设计的概念:所有操作行为都使用相同接口,虽然它们的型别不同。

    功能

    迭代器使开发人员能够在类或结构中支持foreach迭代,而不必整个实现IEnumerable或者IEnumerator接口。只需提供一个迭代器,即可遍历类中的数据结构。当编译器检测到迭代器时,将自动生成IEnumerable接口或者IEnumerator接口的Current,MoveNext和Dispose方法。

    特点

    1.迭代器是可以返回相同类型值的有序序列的一段代码;
    2.迭代器可用作方法、运算符或get访问器的代码体;
    3.迭代器代码使用yieldreturn语句依次返回每个元素,yield break将终止迭代;
    4.可以在类中实现多个迭代器,每个迭代器都必须像任何类成员一样有惟一的名称,并且可以在foreach语句中被客户端,代码调用如下所示:foreach(int x in SimpleClass.Iterator2){};
    5.迭代器的返回类型必须为IEnumerable和IEnumerator中的任意一种;
    6.迭代器是产生值的有序序列的一个语句块,不同于有一个 或多个yield语句存在的常规语句块;
    7.迭代器不是一种成员,它只是实现函数成员的方式,理解这一点是很重要的,一个通过迭代器实现的成员,可以被其他可能或不可能通过迭代器实现的成员覆盖和重载;
    8.迭代器块在C#语法中不是独特的元素,它们在几个方面受到限制,并且主要作用在函数成员声明的语义上,它们在语法上只是语句块而已;
    9.yield关键字用于指定返回的值。到达yieldreturn语句时,会保存当前位置。下次调用迭代器时将从此位置重新开始执行。 迭代器对集合类特别有用,它提供一种简单的方法来迭代不常用的数据结构(如二进制树)。

    2、集合框架List(ArrayList特有方法、特有迭代器、具体对象特点、增长因子论证)

    • 1、list集合相对于collection集合所特有的方法
     public static void sop(Object obj)
    {
        System.out.println(obj);
    }
    public static void method()
    {
        
        ArrayList al = new ArrayList();
    
        //添加元素
        al.add("java01");
        al.add("java02");
        al.add("java03");
        
        sop("原集合是:"+al);
        //在指定位置添加元素。
        al.add(1,"java09");
    
        //删除指定位置的元素。
        //al.remove(2);
    
        //修改元素。
        //al.set(2,"java007");
    
        //通过角标获取元素。
        sop("get(1):"+al.get(1));
    
        sop(al);
    
        //获取所有元素。
        for(int x=0; x<al.size(); x++)
        {
            System.out.println("al("+x+")="+al.get(x));
        }
    
        Iterator it = al.iterator();
    
        while(it.hasNext())
        {
            sop("next:"+it.next());
        }
    
        //通过indexOf获取对象的位置。
        sop("index="+al.indexOf("java02"));
    
        List sub = al.subList(1,3);
    
        sop("sub="+sub);
    }
    
    • 2、Iterator.remove()与Collection.remove()的区别
      他们并不能实际操作,你要么就同时操作,同时利用集合方法,要不就用迭代器统一操作

      Collection.remove()方法
      在这里插入图片描述
      Iterator.remove()方法
      在这里插入图片描述

    • 3、Iterator与ListIterator的区别

    1. ListIterator有add()方法,可以向List中添加对象,而Iterator不能

    2. ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

    3. ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

    4. 都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。

迭代器的remove方法与集合的remove方法的区别?

只需要了解迭代器在内存中的运行,指针。迭代器与集合是两个对象,如果说在迭代器中调用集合中的remove方法,会报currentMddifyException【当前改变异常】

array与arrayList的区别?

  1. array长度固定,arrayList反之
  2. array一旦声明,只能放该类的对象

arrayList与LinkedList的区别?

  1. ArrayList的数据结构是数组存储,造成了查询速度快,增删慢,线程不同步。
  2. LinkedList的数据结构是链表存储,增删快,查询慢【它存储每一个对象记录的前一个接点和最后一个接点】
  3. vector:线程同步【它的所有方法里加了锁其标

使用LinkedList完成堆栈以及队列的存储空间的定义?

位于同一个东西

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值