1. 本章学习总结

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

2. 书面作业

Q1. ArrayList代码分析

1.1 解释ArrayList的contains源代码

源代码:

  1. public boolean contains(Object o) {
  2. return indexOf(o) >= 0;
  3. }
  4. public int indexOf(Object o) {
  5. if (o == null) {
  6. for (int i = 0; i < size; i++)
  7. if (elementData[i]==null)
  8. return i;
  9. } else {
  10. for (int i = 0; i < size; i++)
  11. if (o.equals(elementData[i]))
  12. return i;
  13. }
  14. return -1;
  15. }

ArrayList实际上是一个数组,contains方法就是遍历一次数组elementData,

当o为null时,找到后就返回;当o不为null时,若equals则返回下标;找不到时返回-1。

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

  1. public E remove(int index) {
  2. rangeCheck(index);
  3. modCount++;
  4. E oldValue = elementData(index);
  5. int numMoved = size - index - 1;
  6. if (numMoved > 0)
  7. System.arraycopy(elementData, index+1, elementData, index,
  8. numMoved);
  9. elementData[--size] = null; // clear to let GC do its work
  10. return oldValue;
  11. }
  12. private void rangeCheck(int index) {
  13. if (index >= size)
  14. throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
  15. }

rangeCheck方法中首先判断index是否超出size,若超出则抛出IndexOutOfBoundsException,

remove操作中首先modCount自增,然后删除一个元素,后面元素位置前移,然后返回删除的

元素,size自减一次,size-1位置为null。

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

  1. 不需要,因为ArrayList实际上是一个Objcet数组,Objcet是所有类的父类,所以ArrayList存储数据时不需要考虑元素的类型。

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

  1. public boolean add(E e) {
  2. ensureCapacityInternal(size + 1);
  3. elementData[size++] = e;
  4. return true;
  5. }
  6. private void ensureCapacityInternal(int minCapacity) {
  7. if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
  8. minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
  9. }
  10. ensureExplicitCapacity(minCapacity);
  11. }
  12. modCount++;
  13. // overflow-conscious code
  14. if (minCapacity - elementData.length > 0)
  15. grow(minCapacity);
  16. }
  17. private void grow(int minCapacity) {
  18. // overflow-conscious code
  19. int oldCapacity = elementData.length;
  20. int newCapacity = oldCapacity + (oldCapacity >> 1);
  21. if (newCapacity - minCapacity < 0)
  22. newCapacity = minCapacity;
  23. if (newCapacity - MAX_ARRAY_SIZE > 0)
  24. newCapacity = hugeCapacity(minCapacity);
  25. // minCapacity is usually close to size, so this is a win:
  26. elementData = Arrays.copyOf(elementData, newCapacity);
  27. }

ensureCapacityInternal(size + 1); 首先确定内部容量为size + 1,modCount++;modCount自增,

if (minCapacity - elementData.length > 0)

grow(minCapacity);

如果所需容量超出数组elementData容量,就调用grow()方法,

int newCapacity = oldCapacity + (oldCapacity >> 1);容量扩大1.5倍,确定容量后使用Arrays.copyOf

建立新的数组,把旧数组拷贝到新数组中。

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

  1. private void rangeCheck(int index) {
  2. if (index >= size)
  3. throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
  4. }

声明为private就只能内部使用,说明它不想被外部使用这个方法或是外部根本不需要使用这个方

法,这里rangeCheck已经告诉我们了结果的正确与错误,所以外部根本不需要知道内部到底如何操

作,所以该方法应该声明为private而不声明为public。

Q2. HashSet原理

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

  1. 通过计算出待存储对象的散列码(hashCode),做为存储位置。
  2. 散列表用链表数组实现--->每个列表被称为桶。根据哈希码查找对应的桶;
  3. 如果桶中已有其他元素,则调用equals方法与已有元素比较;
  4. 如果比较结果为假,则将元素插入桶中,如果比较结果为真,则用新的值替换旧的值。

Q3. ArrayListIntegerStack

题集jmu-Java-05-集合之5-1 ArrayListIntegerStack


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

(不要出现大段代码)

  1. ArrayListIntegerStack是用ArrayList来实现,而ArrayList可以自动扩容,但素ArrayIntegerStack就有规定的容量;
  2. 而且ArrayListIntegerStack不需要指针,可以直接进行删除等操作,但素ArrayIntegerStack则需要指针。

3.2 简单描述接口的好处.

  1. 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系;
  2. 能够更加清晰地把系统的实现细节与接口分离,调用者只需关心接口就行了,不用管内部操作实现。

Q4. Stack and Queue

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

  1. import java.util.Scanner;
  2. import java.util.Stack;
  3. public class Main201521123070 {
  4. public static void main(String[] args) {
  5. // TODO Auto-generated method stub
  6. Scanner in = new Scanner(System.in);
  7. String str = in.next();
  8. System.out.println(check(str));
  9. }
  10. public static boolean check(String str){
  11. Stack<Character> stack = new Stack<Character>();
  12. boolean flag = true;
  13. for(int i = 0;i < str.length(); i++){
  14. stack.push(str.charAt(i));
  15. }
  16. for(int j = 0;j < str.length(); j++) {
  17. if (stack.pop() != (str.charAt(j)))
  18. flag = false;
  19. break;
  20. }
  21. return flag;
  22. }
  23. }

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


Q5. 统计文字中的单词数量并按单词的字母顺序排序后输出

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

5.1 实验总结

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

3.1本周Commit历史截图

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

201521123070 《JAVA程序设计》第7周学习总结的更多相关文章

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

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

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

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

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

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

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

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

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

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

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

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. python enumerate 枚举函数用法

    enumerate()说明 enumerate()是python的内置函数 enumerate在字典上是枚举.列举的意思 对于一个可迭代的(iterable)/可遍历的对象(如列表.字符串),enum ...

  2. layer弹出层传值到父页面

    目前做的项目中用到layer弹层传值,弹层输入框输入文本,点击确定按钮,父页面的树结构,会自动添加分组. 在此粘贴下代码,以后遇到,方便回忆,如有疑问请留言,或许会为您解答 $(document).r ...

  3. 从理解开始 谈谈px rem 和 em 的区别与联系

    概述 古语有云,没有规矩则不成方圆.秦灭六国之后为了促进国内生产力的发展,也是大力推进全国度量衡的统一.车同轨,书同文.与"尺寸"相关的问题(手动滑稽),从古至今一直为人们所关注. ...

  4. Linux删除其他程序正在使用的文件

    今天在逛论坛时发现网友提的一个问题: 今天做实验发现,当前活动日志丢失后,数据库居然还可以正常写数据,还可以正常提交,如果是ORACLE,这个时候数据库已经崩溃了,很奇怪DB2这个时候把事务写到哪儿去 ...

  5. numpy数组、向量、矩阵运算

    可以来我的Github看原文,欢迎交流. https://github.com/AsuraDong/Blog/blob/master/Articles/%E6%9C%BA%E5%99%A8%E5%AD ...

  6. postman参数为Json数据结构

    本文主要postman字段为Json结构时的操作说明 本文以订单发货为例,根据接口文档去设计 用户下单接口字段如图: 有两种方式可以将字段Json数据传递: 下图为接口字段规则: 接口为post请求方 ...

  7. JPA 中文乱码问题

    背景 Spring Boot使用JPA,当前端传入到后端的数据为中文的时候,入库变为??? 解决方法 修改下项目的配置文件中DB的配置,新增characterEncoding=utf-8即可 spri ...

  8. 【Zookeeper】应用场景

    配置的管理在分布式应用环境中很常见,例如同一个应用系统需要多台server运行,但是他们运行的应用系统的某些配置项是相同的,如果要修改这些相同的配置项,那么就必须同时修改每台运行这应用系统的serve ...

  9. 将Windows系统默认的Administrator帐号改名为我们自定义的名称

    将Windows系统默认的Administrator帐号改名为我们自定义的名称.. ---------如何将Administrator帐号改名为我们自定义的名称:Win+R--->>输入g ...

  10. ​'JAVAC' 不是内部或外部命令的解决方法

    ​'JAVAC' 不是内部或外部命令解决方法.. 在cmd里边输入javac就会提示”'JAVAC' 不是内部或外部命令,也不是可运行的程序 或批处理文件..此时原因分析: 一.确定是否安装了jdk ...