1. 本周学习总结

2. 书面作业

  1. ArrayList代码分析
    1.1 解释ArrayList的contains源代码                                                                                                                                                                                                                                                                                 答:

     public boolean contains(Object o) {
    return indexOf(o) >= 0;
    }
    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;
    }
    解释:contains实现遍历ArrayList,indexOf函数返回值为序号,如果o为null则没有equals方法。

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

    public E remove(int index) {
    rangeCheck(index); modCount++;
    E oldValue = elementData(index); int numMoved = size - index - 1;
    if (numMoved > 0)
    System.arraycopy(elementData, index+1, elementData, index,
    numMoved);
    elementData[--size] = null; // clear to let GC do its work return oldValue;
    }
     private void rangeCheck(int index) {
    if (index >= size)
    throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }
    解释:A:先检查要删除的位置如果超出List大小,就抛出IndexOutOfBoundsException异常。大概流程就是类似数组删除操作,删掉某个元素后,其位置之后的元素前移,最后再把size-1位置赋null让GC clear it。

    1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的类型吗?                                                                                                                                                                                                                                            答:不用考虑。因为ArrayList的参数是Object对象,而一切对象都是Object。
    1.4 分析add源代码,回答当内部数组容量不够时,怎么办?                                                                                                                                                                                                                                                        答:

    代码如下:

    public boolean add(E e) {
    ensureCapacityInternal(size + 1); // Increments modCount!!
    elementData[size++] = e;
    return true;
    }

    ensureCapacity()方法,它的作用是用来调整容量,保证elementData内部容量是size + 1。

    private void ensureCapacityInternal(int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
    minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
    } ensureExplicitCapacity(minCapacity);
    }
    private void ensureExplicitCapacity(int minCapacity) {
    modCount++; // overflow-conscious code
    if (minCapacity - elementData.length > 0)
    grow(minCapacity);
    }

    如果超出容量,则调用grow方法增加容量。

    private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity - minCapacity < 0)
    newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
    newCapacity = hugeCapacity(minCapacity);
    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);
    }

    扩容至1.5倍,也就是说新List的容量是旧的1.5倍,再把旧数组拷贝至新数组。

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

    源代码如下:

     private void rangeCheck(int index) {
    if (index < 0 || index >= this.size)
    throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }
    答:因为不想外部使用这个方法。这样可以保证外部操作是容量不会越界而抛出IndexOutOfBoundsException(outOfBoundsMsg(index))。
  2. HashSet原理
    2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?               
    答:当向HashSet(散列集)中增加新对象时,首先根据哈希函数计算要增加对象的hashCode码,根据该值来得到一个位置用元素来存放当前对象。如果在该位置上没有东西的话,那么HashSet认为该元素在集合中不存在,直接增加进去。如果在该位置已经有一个元素了,接着将准备增加到集合中的元素与该位置上的元素用equals方法进行比较。如果该equals方法返回false,那么说明HashSet中不存在该元素,再进行一次散列,将该元素放到散列后计算出来的地址中。如果equals方法返回true,那么说明HashSet中已经存在该元素了,不再将该元素增加到HashSet中。此过程需要调用的是equals方法和insert方法。

  3. ArrayListIntegerStack
    题集jmu-Java-05-集合之5-1 ArrayListIntegerStack
    3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)                                                                                            答:不同之处在于前者使用了ArrayList的动态数组,不需要判断是否栈满,直接使用ArrayList内部的方法,后者是已经定义了数组的长度,纯粹就是对数组的操作。
    3.2 简单描述接口的好处.                                                                                                                                                                                                                                                                                                    答:对本题来说,两个ArrayIntegerStack方法同名,却是对IntegerStack接口进行不同的实现。所以可以看出接口的好处之一是对要完成功能相似而具体实现方法不同的情况来说,可以用相同的方法名,不同的实现,来根据需求通过不同的方式来实现。

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

    public boolean add(E e) {
    ensureCapacityInternal(size + 1); // ensureCapacityInternal用来调整容量
    elementData[size++] = e;
    return true;
    }
    private void ensureCapacityInternal(int minCapacity) {
    if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
    minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
    } ensureExplicitCapacity(minCapacity);
    }
    modCount++;
    // overflow-conscious code
    if (minCapacity - elementData.length > 0)
    grow(minCapacity);
    }
    private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity - minCapacity < 0)
    newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
    newCapacity = hugeCapacity(minCapacity);
    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);
    } 内部数组容量不够时,会自动调用grow方法生成一个1.5倍大的数组将原数组元素放进去。

    4.2 题集jmu-Java-05-集合之5-6 银行业务队列简单模拟。(不要出现大段代码)

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

    while (input.hasNextLine()) {
    String str = input.next();
    if (str.equals("!!!!!")){
    break;}
    else if (!str.contains(str))
    str.add(str);
    }
    5.1 实验总结:这题关键就是使用了Set的自然排序实现类TreeSet,此类可以对添加的对象进行默认排序。

3. 码云上代码提交记录及PTA实验总结

题目集:jmu-Java-05-集合

3.1. 码云代码提交记录

3.2. PTA实验

201521123087 《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. DoNet 高效开发必备开发工具

    工欲善其事,必先利其器,没有好的工具,怎么能高效的开发出高质量的代码呢? 本文为 ASP.NET 开发者介绍一些高效实用的工具,包括 SQL 管理,VS插件,内存管理,诊断工具等,涉及开发过程的各个环 ...

  2. python_求相邻数

    什么是相邻数? 比如5,相邻数为4和6,和5相差1的数,连续相差为1的一组数 需求: 遍历inputList 所有数字,取出所有数字,判断是否有相邻数, 不相邻数字 和 相邻数字 都以 “数组”形式 ...

  3. python学习之while 和for循环

    while 和for循环 一般格式while <test>: <statment>;else: <statment>; else 部分为可选部分,(控制权离开wih ...

  4. MFC基础窗口创建,CWinApp、CFrameWnd

    1.CWinApp(包括了这个类的导出类):代表了我们的程序.封装了消息循环等. 2.CFrameWnd:代表了程序的框架窗口.封装了窗口的注册.创建.显示.刷新.等等窗口操作. 3.Win32中.一 ...

  5. 设计模式的征途—20.备忘录(Memento)模式

    相信每个人都有后悔的时候,但是人生并无后悔药,有些错误一旦发生就无法再挽回,有些事一旦错过就不会再重来,有些话一旦说出口也就不可能再收回,这就是人生.为了不让自己后悔,我们总是需要三思而后行.这里我们 ...

  6. Node.js之操作文件系统(一)

    Node.js之操作文件系统(一) 1. 同步方法与异步方法 在Node.js中,使用fs模块来实现所有有关文件及目录的创建.写入及删除操作.,在fs模块中,所有对文件及目录的操作都可以使用同步与异步 ...

  7. Java web轻量级开发面试教程读书笔记:数据库方面,如何准备面试

    如果在面试或与资深人事交流的过程中,你能有效合理地展示出本章所给出的一些知识点,那么对你的评价就会是"对数据库有深入了解",甚至能加上"有设计数据表的经验",即 ...

  8. WEB前端规范命名

    头部 header ----------------用于头部 主要内容 main ------------用于主体内容(中部) 左侧 main-left -------------左侧布局 右侧 ma ...

  9. GCC和G++区别

    原文:http://www.cnblogs.com/samewang/p/4774180.html 看的Linux公社的一篇文章,觉得不错,内容复制过来了. 其实在这之前,我一直以为gcc和g++是一 ...

  10. CSS边框外的小三角形+阴影效果的实现。

    ...虽然是一个很小的问题,但其实还是挺实用的. 实现一个边框外的角. 用纯CSS来写. 一开始实现的效果是这个样子的. 但是这个效果没有办法给他附带阴影,所以换了一种写法.实现成了这个样子 想要实现 ...