zoukankan      html  css  js  c++  java
  • JAVA集合类型详解

    一.前言

        作为java面试的常客【集合类型】是永恒的话题;在开发中,主要了解具体的使用,没有太多的去关注具体的理论说明,掌握那几种常用的集合类型貌似也就够使用了;导致这一些集合类型的理论有可能经常的忘记,下面就对集合类型进行详细的介绍。

    二.集合树继承图解

      集合类型主要有3种:set(集)、list(列表)和map(映射)。

    Collection接口
        Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。
      所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个 Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素。后一个构造函数允许用户复制一个Collection。
      如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:

        Iterator it = collection.iterator(); // 获得一个迭代子
        while(it.hasNext()) {
          Object obj = it.next(); // 得到下一个元素
        }

      由Collection接口派生的两个接口是List和Set。

     三.集合实现类

    Collection接口:

          List接口:【实现类: LinkedList,Vector,ArrayList】

          Set接口:【实现类: HashSet、LinkedHashSet】   
          SortedSet接口:【’实现类:TreeSet】 

    Map接口:

          Map接口:【实现类:HashMap、Hashtable、LinkedHashMap、Properties】

    1、List:有序列表,允许存放重复的元素

         实现类: 
                    ArrayList:数组实现,需要一块连续的存储空间,查询快,增删慢,不同步,线程不安全,轻量级;
                    LinkedList:链表实现,增删快,查询慢; 
                    Vector:数组实现,同步,线程安全,重量级;基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用,它不可能走出Array的限制。性能也就不可能超越Array。所以,在可能的情况下,我们要多运用Array。另外很重要的一点就是Vector“synchronized”的,这个也是Vector和ArrayList的唯一的区别。ArrayList:同Vector一样是一个基于Array上的链表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。LinkedList:LinkedList不同于前面两种List,它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势。 

    2、Set:无序集合,不允许存放重复的元素

        实现类: 

                  HashSet: HashSet的后台有一个HashMap,equals返回true,hashCode返回相同的整数,哈希表:存储的数据是无序的;初始化后台容量;只不过生成一个HashSet的话,系统只提供key的访问;如果有两个Key重复,那么会覆盖之前的;

                  LinkedHashSet:此实现与 HashSet 的不同之外在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。

                 子接口SortedSet,对Set排序实现类 :TreeSet:使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序;二叉树实现的; 

    3、Map
                HashMap:键值对,key不能重复,但是value可以重复;key的实现就是HashSet;value对应着放;允许null的键或值;
                Hashtable:线程安全的,不允许null的键或值;
                Properties:key和value都是String类型,用来读配置文件;TreeMap:对key排好序的Map; key 就是TreeSet, value对应每个key; key要实现Comparable接口或TreeMap有自己的构造器;

                LinkedHashMap:此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。存储的数据是有序的。

    4、两个工具类 Arrays 和 Collections
                 Arrays、此类包含用来操作数组(比如排序和搜索)的各种方法。

                Collections、主要提供了在 collection 上进行操作的静态方法(同步集合类方法) 。

  • 相关阅读:
    python 接口自动化测试--框架定型(六)
    python 接口自动化测试--框架整改(五)
    持续集成接口自动化-jmeter+ant+jenkins(一)
    记 suds 模块循环依赖的坑-RuntimeError: maximum recursion depth exceeded
    python 接口自动化测试(四)
    python 接口自动化测试(三)
    python 接口自动化测试(二)
    python 接口自动化测试(一)
    Jmeter 正则提取器
    python 正则提取(re模块)
  • 原文地址:https://www.cnblogs.com/hongwz/p/5755433.html
Copyright © 2011-2022 走看看