1. 本章学习总结

以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。

2. 书面作业

Q1.ArrayList代码分析

1.1 解释ArrayList的contains源代码

答:

public boolean contains(Object o) {
    return indexOf(o) >= 0;
}
//indexOf()方法 返回某个指定的字符串值在字符串中首次出现的位置
public int indexOf(Object o) {
    if (o == null) {
      for (int i = 0; i < size; i++)
         if (elementData[i]==null)
           return i;
    } else {
        for (int i = 0; i < size; i++)
        if (o.equals(elementData[i]))
            return i;
           }
      return -1;

作用:通过equeals方法判断列表中是否包含指定的不为null的元素,若包含则返回true,否则返回false。

1.2 解释E remove(int index)源代码

答:

public E remove(int index) {
    rangeCheck(index);

    modCount++;//modCount:用来检查列表中的元素是否发生结构性变化(列表元素数量发生改变)
    E oldValue = elementData(index);

    int numMoved = size - index - 1;
    if (numMoved > 0)
        System.arraycopy(elementData, index+1, elementData, index,
                     numMoved);
//数组复制:从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。
    elementData[--size] = null;
        return oldValue;
}
private void rangeCheck(int index) {
    if (index >= size)
        throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
//若删除的位置如果超出List的大小size,就抛出IndexOutOfBoundsException异常

作用:删除数组中中指定的元素,并返回所删除的元素。

1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的类型吗?

答:在java中,ArrayList可以存储任何类型的对象(将所有存储的对象强制转化成Object类型),因此可以在定义ArrayList时,通过使用“<参数化类型>(泛型)”的方式指定存储元素的数据类型。

1.4 分析add源代码,回答当内部数组容量不够时,怎么办?

答:

public boolean add(E e) {
ensureCapacityInternal(size + 1);  // Increments modCount!!
elementData[size++] = e;
return true;
}
private void ensureCapacityInternal(int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
        minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
    }  

    ensureExplicitCapacity(minCapacity);
}
private void ensureExplicitCapacity(int minCapacity) {
    modCount++;
    if (minCapacity - elementData.length > 0)  //需要的容量比现有数组容量大,就调用grow()方法
        grow(minCapacity);
}
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
private void grow(int minCapacity) {
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);//扩容,将新容量增加至原来容量的一点五倍(右移一位就是/2)
    if (newCapacity - minCapacity < 0)//判断新容量是否足够
        newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
        newCapacity = hugeCapacity(minCapacity);
    elementData = Arrays.copyOf(elementData, newCapacity);//数组复制
}  

当内部数组容量不够时,会引用一个大小为原来数组大小1.5倍的新数组,并通过数组复制的方法,从而在新的数组内进行add操作。

1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?

答:

private void rangeCheck(int index) {
if (index >= size)
    throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}  

private的主要作用就是封装。rangeCheck方法对数据类型的内部操作来说是必需的,但并不需要让外部能够使用或者是访问,外部只需知道rangeCheck方法的结果。

Q2.HashSet原理

2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?

答:当向HashSet集合中添加一个对象时,首先调用该对象的hashCode()方法来获得该元素的哈希值,然后根据对象的哈希值计算出一个存储位置。如果该位置上没有元素,则将元素直接存入,如果该位置上有元素存在,则会调用equals()方法,让欲存入的元素依次和当前位置上的元素进行比较,如果返回的结果为false就将元素存入集合,如果返回的结果为true,则说明有重复元素,就将欲存入的元素舍弃。

Q3.ArrayListIntegerStack(题集jmu-Java-05-集合之5-1 ArrayListIntegerStack)

3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)

答:

ArrayListIntegerStack:使用ArrayList,可看作一个长度可以变化的数组,不需要考虑栈满的情况。

ArrayIntegerStack:数组存储,其存储长度一旦确定无法改变,同时需要一个指针top来确定栈顶元素,由于存储长度已经确定,需要考虑栈满的情况。

3.2 简单描述接口的好处.

答:接口能够使其定义和具体实现方法尽可能分离,能够提高程序的灵活性以及可维护性。实现方法需要改变时,只要接口及接口功能不变,甚至可以在不改动定义代码时将实现方法整个替换掉。(就像我们将一个60G硬盘换成一个160G的硬盘,计算机其他地方不用做任何改动,而是把原硬盘拔下来、新硬盘插上就行了,因为计算机其他部分不依赖具体硬盘,而只依赖一个IDE接口,只要硬盘实现了这个接口,就可以替换上去。)

Q.4.Stack and Queue

4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈,但不能使用java的Stack类(具体原因自己搜索)。请粘贴你的代码,类名为Main你的学号。

答:

4.2 题集jmu-Java-05-集合之5-6 银行业务队列简单模拟。

答:1.实现Queue接口的ArrayDeque类的用法

Q5.统计文字中的单词数量并按单词的字母顺序排序后输出(题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出)

5.1 实验总结

1.TreeSet的用法,通过TreeSet自然排序。

2.Collection.toArray的用法。

Q7.面向对象设计大作业-改进

7.1 完善图形界面(说明与上次作业相比增加与修改了些什么)

7.2 使用集合类改进大作业



3.本周码云代码Commit历史截图

在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图,如下图所示

201521123026 《java程序设计》第七周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第七周学习总结

    1.本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: 源代码: //contains()方法 public boolean c ...

  2. 201871010106-丁宣元 《面向对象程序设计(java)》第七周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第七周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  6. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  7. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  8. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

  9. 20175209 《Java程序设计》第九周学习总结

    20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...

  10. 20175317 《Java程序设计》第九周学习总结

    20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...

随机推荐

  1. 如何做到 Laravel 配置可以网站后台配置【社交系统ThinkSNS+研发日记四】

    距离上一次分享差不多一周了,本文分享下利用 Laravel 的 Bootstrapping 达到网站后台设置 laravel 配置. 需求场景 首先,ThinkSNS+ 作为一个用户可以使用的「社交系 ...

  2. .NET Core 2.0 是您的最好选择吗?

    本月14日,微软发布.NET Core 2.0 正式版,它的发布意味着.NET Core平台更加成熟,也预示其更美好的未来.本文将分析.NET Core 的特性以及未来发展方向,为开发人员选择在何种平 ...

  3. AIX smit下创建逻辑卷、添加文件系统并挂载

    --AIX smit下创建逻辑卷,添加文件系统并挂载------------------------------------------2013/10/15 首先创建逻辑卷smit lv ,这里没多大 ...

  4. oracle 错误码 ORA-00119 / ORA-00130

    今天启动oracle时居然报错,错误信息如下: SQL> startup ORA-00119: invalid specification for system parameter LOCAL_ ...

  5. JS非空验证及邮箱验证

    非空验证 <body> <table> <tr> <td>姓名:</td> <td><input type="t ...

  6. 单线程的JavaScript

    Javascript是单线程的 因为JS运行在浏览器中,是单线程的,每个window一个JS线程,既然是单线程的,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码.而浏览器是事件驱动的(Ev ...

  7. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——收流篇:(二)示例

    一.搭建RTSP服务器 要想测试RTSP客户端,没有服务端怎么行呢?然而,有时候条件有限,手头并没有独立的RTSP服务器拿来用,那么我们不妨自己撘一个. 以下有2种方便的做法可供选择: 第一种:使用v ...

  8. 关于Java String 类型转换时null的问题(转)

    关于Java String 类型转换时null的问题 开发中经常遇到从集合类List.Map中取出数据转换为String的问题,这里如果处理不好,经常会遇到空指针异常java.lang.NullPoi ...

  9. 数据库及SQL----常用知识点总结

    数据库也是计算机类笔试面试中不可避免会遇到的考点,尤其是银行和部分传统软件类公司.这里根据整理的资料,对数据库的相关知识也做个总结吧.希望学过数据库但长时间不用的同学根据这些知识能够回忆和重拾,没学过 ...

  10. Linux常见命令(四)——mkdir

    今天我们来介绍第四个命令:mkdir.mkdir (Make Directory 创建目录): 若指定目录不存在则创建目录.在创建目录时,要求创建目录的用户具有写权限,并应保证新建的目录没有重名. 用 ...