zoukankan      html  css  js  c++  java
  • 20169211《移动平台开发实践》第四周作业

    [TOC]

    教材学习内容总结


    集合框架学习总结

    Collection集合学习总结

    集合的由来

          我们学习的是面向对象语言,而面向对象语言对事物的描述是通过对象体现的,为了方便对多个对象进行操作,我们就必须把这多个对象进行存储。而要想存储多个对象,就不能是一个基本的变量,而应该是一个容器类型的变量,在我们目前所学过的知识里面,有哪些是容器类型的呢?数组和StringBuffer。但是呢?StringBuffer的结果是一个字符串,不一定满足我们的要求,所以我们只能选择数组,这就是对象数组。而对象数组又不能适应变化的需求,因为数组的长度是固定的,这个时候,为了适应变化的需求,Java就提供了集合类供我们使用。

    数组和集合的区别?

    长度区别:数组的长度固定、集合长度可变;
    内容不同:数组存储的是同一种类型的元素、而集合可以存储不同类型的元素;
    元素的数据类型问题:数组可以存储基本数据类型,也可以存储引用数据类型、集合只能存储引用类型;
    

    集合的继承关系

        |-Collection顶层接口
            |-List子接口
                |-ArrayList实现类
                |-LinkedList实现类
                |-Vector实现类
            |-Set子接口
                |-HashSet实现类
                |-TreeSet实现类

    Collection集合常用方法(略,参考JDK-API)

    List集合

    (1)List集合的特点

    1. 元素有序:插入和取出的顺序相同;
    2. 此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。;
    3. 与 set 不同,列表通常允许重复的元素;
    4. List 接口在 iterator、add、remove、equals 和 hashCode 方法的协定上加了一些其他约定,超过了 Collection 接口中指定的约定;
    5. List 接口提供了特殊的迭代器,称为 ListIterator,除了允许 Iterator 接口提供的正常操作外,该迭代器还允许元素插入和替换,以及双向访问。还提供了一个方法来获取从列表中指定位置开始的列表迭代器。
    

    (2)List集合特有的方法

    ```
    void add(int index, Object element) //在指定索引处添加元素;
    Object get(int index)//获取指定位置的元素;
    ListIterator listIterator()//List集合特有迭代器;
    Object remove(int index)//根据索引位置删除元素,返回被删除的元素;
    Object set(int index, Object element)//根据索引修改元素,返回被修改的元素;
    ```
    

    (3)List集合三个实现类的特点

        |-ArrayList(重点):

    - 底层数据结构是数组,查询快,增删慢;
    - 线程不安全,但效率高;
    

        |-Vector向量

    - Vector类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作;
    - 底层数据结构是数组,查询快,增删慢;
    - 线程安全,效率低;
    

    说明:

    Vector向量特有方法:

    ```
    void add addElement(Object obj)  //add()
    Object elementAt(int index)  //get()
    Emuneration elements()	//Iterator iterator()
    boolean hasMoreElements() //hasNext()
    Object nextElement()  //next()
    ```
    

        |-LinkedList(重点)

    - 底层数据结构是链表,查询慢,增删快;
    - 线程不安全,效率高;
    

    说明:

    LinkedList特有方法:

    ```
    void addFirst(E e);
    void addLast(E e);
    E getFirst();
    E getLast();
    E removeFirst();
    E removeLast();
    ```
    

    示例代码

    Set集合

    |--Set:无序(插入和取出顺序不一致),元素唯一;

        |--HashSet

    -  元素无序(插入和取出顺序不一致),唯一;
    -  此类实现 Set接口,由哈希表(实际上是一个 HashMap实例)支持。它不保证 set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null元素;
    

        |--LinkedHashSet

    - 元素有序(插入和取出顺序一致),唯一:由链表保证元素的有序(插入和取出的顺序是一致的)、由哈希表保证元素的唯一,即底层是哈希表+链表结构。
    

        |--TreeSet

    - 元素可排序,唯一;
    - 使用元素的自然顺序对元素进行排序,或者根据创建 set时提供的 Comparator进行排序,具体取决于使用的构造方法。;
    

    示例代码

    Map集合学习总结

    Map集合——以键值对的方式存放数据。

    例如:存取学生信息

    键:类似set集合——key值不允许重复 值:类似list集合,值可重复
    学号1 学生1信息
    学号2 学生2信息
    学号3 学生3信息
    学号2(已存在,不允许重复) 学生4信息
    学号5 学生4信息(可重复)

    Map集合的特点

    将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

    Map集合的继承关系

        |--Map顶层接口
            |--HashMap实现类
            |--HashTable实现类
            |--TreeMap实现类
            |--LinkedHashMap实现类
            |--Properties实现类

    Map结合与Collection集合的区别

    - Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的;
    - Collection集合存储元素的单独出现的,Collection接口的子接口Set集合中存放的元素是唯一的,而List中存放的元素是可重复的;
    

    注意

    - Map集合的数据结构只针对键有效,跟值无关,常用实现类:HashMap,TreeMap,LinkedHashMap,HashTable,Properties等。
    - Collection集合的数据结构针对元素有效:常用子接口:Set,List。
    

    Map集合常用方法(略,参考JDK-API)

    说明

    (1)Map集合遍历的两种方式:

    1. 根据键找值:Set<K> keySet() : 返回此映射中包含的键的 Set视图。;
    2. 根据键值对对象找键和值:Set<Map.Entry<K,V>> entrySet() : 返回此映射中包含的映射关系的 Set视图;
    

    (2)Map接口(顶层接口)常用实现类的特点

    1. HashMap(最常用):线程不安全,效率高;允许null键和null值;遍历无序输出;
    2. HashTable:线程安全,效率低;不允许null键和null值;遍历无序输出;
    3. TreeMap:键是红黑二叉树结构,可以保证键的排序(存储和取出的顺序一致)和唯一性;线程不安全;
    4. LinkedHashMap:Map接口的哈希表和链接列表实现,具有可预知的迭代顺序;线程不安全;由哈希表保证键的唯一性、由链表保证键的有序性(存储和取出的顺序一致)。
    

    示例代码

    代码托管

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 220/220 1/1 10/10
    第二周 400/620 1/2 18/28
    第三周 650/1120 1/3 12/40
    第四周 1443/2563 1/4 12/52

    参考资料

    • [Effective.Java中文版(第2版)].布洛克;

    • [Head First Java (中文版)].塞若;

    • Java从入门到精通 第三版;

    • 深入Java内存模型;

    • [Java语言程序设计-进阶篇(原书第8版)].梁勇

    • Head First设计模式(高清版);

  • 相关阅读:
    date之Hi时间的思考
    空循环比较 for foreach array_map array_walk
    ECSHOP 数据库结构说明 (适用版本v2.7.3)
    自定义写入读出文件作为存储的函数
    session 重写进入redis测试
    单独批次性任务采用MySQL定时器解决需求
    php 接收 Content-Type 是 application/json的请求数据
    centos 6.4 mysql rpm 离线安装【备忘】
    solr单机版安装与基本部署
    vim&vi在编辑的时候突然卡死,不接收输入问题的解决
  • 原文地址:https://www.cnblogs.com/sharemi/p/6623732.html
Copyright © 2011-2022 走看看