zoukankan      html  css  js  c++  java
  • day18 集合框架(JCF)

    集合框架(JCF)java collections framework

    框架:为了实现某一目的/功能而预先提供的一系列封装好的具有继承或实现关系的类与接口。

    1、这种框架是高性能的,对基本类集(动态数组、链接表、树、散列表)的实现是高效率的。

    2、框架必须允许不同的类集以相同的方式和高度互相操作方式工作。

    3、类集必须是容易扩展和修改的。

    为了实现这些目标,类集框架被设计成包含了一组标准接口的类与接口:

    Collection 是存放一组单值的最大接口。

    List——列表

    是Collection的子接口,里面的内容允许重复。

    List的特点:线性。即:有序。元素放入的顺序和元素的存储顺序保持一致。

    表象上:List最大的特点就是有下标。

    ArrayList: 就是作为一个数组的封装出现的,底层就是数组。

    LinkedList:底层封装的是一个双向链表。

    1、查找、修改用的多的时候用ArrayList。

    2、增加、删除用的多的时候(特别是往中间增加、删除)用LinkedList。

    3、线程安全,数据量大的时候考虑用vector。

    泛型<>:用来控制集合只能操作某一种数据类型。

    遍历:1、普通for循环遍历。

            2、使用迭代器Iterator完成遍历。——没有下标从头到尾走一遍,不能操作数组。

            3、for-each循环语句,底层封装的就是迭代器,语法简单,还可以操作数组。推荐使用。

    Set——集

    是collection的子接口,里面的内容不允许重复。

    特点:不能放置重复元素,无序存放元素。

          表象上:Set没有下标。

    HashSet判断两元素不重复:1、调用equals方法比较两对象

                                         2、两元素的hashcode值保持一致

    只有这两个条件同时满足,java才认为是同一对象。

    所有重写了equals方法一般要重写hashcode方法,让equals返回true的时候,hashcode返回的值应该一样。

    hashSet只有增、删、求长度和遍历等操作。

    遍历:1、迭代器

             2、for-each

    Map——映射

    是存放一对值的最大接口,所有的元素都以键和值的方式存储。

    特点:键值对——键要求唯一,值可以重复

    常用子类:hashMap、properties(专用于操作属性文件)

    hashMap

    常用操作:增、删、改、查、容、遍历

    遍历的时候:不能同时遍历所有的键和值,只能单独遍历键与值。

    键在遍历的时候用Set类型来接。

    值在遍历的时候用Collection来接。

    hashMap与hashTable比较:1、hashMap非线性安全,hashTable是线性安全的。

                                         2、hashMap允许null来做键/值,hashTable不允许。

    properties

    常用操作:增、删、查、改、容、存、取。

    存的时候,调用的是.store方法存文件,

    取的时候,调用.load方法取文件。

    文件类型:.properties——固定格式的文本文件,将是工作中使用率第二的配置文件。

    Iterator

    集合的输出接口,从前到后输出指定集合中的内容。

    ListIterator

    是Iterator的子接口,可以进行双向输出。

    Enumeration

    是最早的输出接口,用于输出指定集合中的内容。

    collections

    集合操作的算法类

    包括排序、求最大、最小、反转、随机混排等操作

    排序的时候,因为是对对象排序,所以应按一定的业务逻辑的自然顺序排序。

    比较器:

    comparable接口:内部比较器

    可对任意数组排序,java泛型技术,二叉树排序原理

    1、类实现comparable接口

    2、重写compareTo方法

    compareTo方法返回的是int类型数据:1表示大于,-1表示小于,0表示相等。

    comparator接口:外部比较器

    补救的做法

    此接口一样需要重写方法,但方法接收两个对象,返回值依然是1、-1、0;

    SortedSet

    单值的排序接口,实现此接口的集合类,里面的内容可以使用比较器排序。

    SortedMap

    存放一对值的排序接口,里面内容按照key排序,使用比较器排序。

    Queue

    队列接口,此接口的子类可以实现队列操作。

    Map.Entry

    Map.Entry的内部接口,每个

    Map.Entry对象都保存着一对key——value的内容,每个map接口中都保存有多个Map.Entry接口实例。

    总的来说:

    1、如果要求线程安全,使用Vector、Hashtable。

    2、如果不要求线程安全,使用ArrayList(查找、修改较多的时候使用)、LinkedList(删除、增加较多的时候使用)、HashMap(要求键值对映的时候使用)。

    3、如果要求键值对应,使用HashMap、HashTable。

    4、如果数据量大、又要求线程安全考虑使用Vector。

  • 相关阅读:
    Linux C 面试题总结
    linux下的缓存机制及清理buffer/cache/swap的方法梳理
    接入WebSocket记录 + 一些个人经验
    Linux基础系列—Linux体系结构和Linux内核结构
    typedef和define具体的详细区别
    RANSAC与 最小二乘(LS, Least Squares)拟合直线的效果比较
    深入理解C/C++混合编程优秀博文赏析与学习
    “error LNK2019: 无法解析的外部符号”之分析
    CUDA和OpenGL互操作经典博文赏析和学习
    [原创]C/C++语言中,如何在main.c或main.cpp中调用另一个.c文件
  • 原文地址:https://www.cnblogs.com/fengshaolingyun/p/6174546.html
Copyright © 2011-2022 走看看