• 集合(1)


    一、什么是集合

    概念:

     集合是一个可以存放对象的容器。

    注意:

      1.集合中存放的只能是对象。比如存一个int型的1进去,会自动转换成Integer类型。

      2.集合中存放的只是对象的引用,对象本身还是在堆内存上中的。

      3.集合可以存放不同类型、不限数量的数据类型。(但是通常一个集合都只存放一种类型的对象,并且会使用泛型加以限制)

    二、集合框架结构图

     发现一个特点,上述所有的集合类,除了 map 系列的集合,即左边集合都实现了 Iterable 接口,这是一个用于遍历集合中元素的接口,通过iterator方法,可以获取到Iterator接口,主要有hashNext(),next(),remove()三种方法。它的一个子接口 ListIterator 在它的基础上又添加了三种方法,分别是 add(),previous(),hasPrevious()。也就是说如果实现 Iterator 接口,那么在遍历集合中元素的时候,只能往后遍历,被遍历后的元素不会再被遍历到,通常无序集合实现的都是这个接口,比如HashSet;而那些元素有序的集合,实现的一般都是 Listierator接口,实现这个接口的集合可以双向遍历,既可以通过next()访问下一个元素,又可以通过previous()访问前一个 元素,比如ArrayList。

      还有一个特点就是抽象类的使用。如果要自己实现一个集合类,去实现那些抽象的接口会非常麻烦,工作量很大。这个时候就可以使用抽象类,这些抽象类中给我们提供了许多

    现成的实现,我们只需要根据自己的需求重写一些方法或者添加一些方法就可以实现自己需要的集合类,工作量大大降低。

    三、集合详解

    1、Iterator:迭代器,它是Java集合的顶层接口(不包括 map 系列的集合,Map接口 是 map 系列集合的顶层接口)

      Object next():返回迭代器刚越过的元素的引用,返回值是 Object,需要强制转换成自己需要的类型

      boolean hasNext():判断容器内是否还有可供访问的元素

      void remove():删除迭代器刚越过的元素

    所以除了 map 系列的集合,我们都能通过迭代器来对集合中的元素进行遍历。

    注意:我们可以在源码中追溯到集合的顶层接口,比如 Collection 接口,可以看到它继承的是类 Iterable

    那这就得说明一下 Iterator 和 Iterable 的区别:

     Iterable :存在于 java.lang 包中。

    我们可以看到,里面封装了 Iterator 接口。所以只要实现了只要实现了Iterable接口的类,就可以使用Iterator迭代器了。

     Iterator :存在于 java.util 包中。核心的方法next(),hasnext(),remove()。

     这里我们引用一个Iterator 的实现类 ArrayList 来看一下迭代器的使用:暂时先不管 List 集合是什么,只需要看看迭代器的用法就行了

     List list = new ArrayList();
            list.add("Tom");
            list.add("Jerry");
            list.add("vi");
            //构造List的迭代器
            Iterator it = list.iterator();
            while(it.hasNext()) {
                Object obj = it.next();
                System.out.println(obj);
            }

    2、Collection:List 接口和 Set 接口的父接口

    3、List :有序,可以重复的集合。

     4、Set:典型实现 HashSet()是一个无序,不可重复的集合

    5、Map:key-value 的键值对,key 不允许重复,value 可以

    6、Map 和 Set 集合的关系

    转载:http://www.cnblogs.com/ysocean/

  • 相关阅读:
    [国嵌笔记][001-003][嵌入式系统概述]
    世界第一魔法师
    详解CSS display:inline-block的应用(转)
    详解CSS float属性(转)
    CSS代码重构与优化之路(转)
    未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。(转)
    【总结整理】display与position之间的关系【较完整】(转)
    css知多少(11)——position(转)
    【总结整理】行内标签span设置position:absolute/float属性可以设置宽度与高度
    【总结整理】display、visibility、overflow的隐藏问题
  • 原文地址:https://www.cnblogs.com/blogforvi/p/11624042.html
Copyright © 2020-2023  润新知