1. 本周学习总结

参考资料:
XMind

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;}public boolean equals(Object obj) {return (this == obj);}

答:根据输入的参数o判断遍历ArrayList的时候使用的方法,如果其为null,则遍历时判断elementData[i]是否为null,如果其不为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 workreturn oldValue;
}
private void rangeCheck(int index) {if (index >= size)throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}

答:先使用rangeCheck方法判断输入的参数index是否超出大小范围,如果是,则输出IndexOutOfBoundsException异常,如果不是,则删除指定的元素,之后再将删除位置之后的元素往前移,最后使得size-1的位置的值为null,并使GC clear it。

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

答:ArrayList储存的数据类型都是Object类,Object类是所有类的父类,存储数据时无需考虑元素的类型。1.1与1.2的源代码中,并没有对ArrayList的数据类型有任何定义,所以不需要考虑。

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

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 codeif (minCapacity - elementData.length > 0) //如果超出容量,则调用grow方法增加容量grow(minCapacity);
}   private void grow(int minCapacity) {// overflow-conscious codeint oldCapacity = elementData.length;int newCapacity = oldCapacity + (oldCapacity >> 1); //增加原来容量的一半(右移一位就是/2),也就是说新List的容量是旧的1.5倍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倍的新数组。
}  

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

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

答:使用private声明,说明此方法只在代码内部进行,而不能被用户获取到,而外部确实也没有用到这个方法的地方,这个方法主要是限制语句的操作范围,让使用者可以清晰地发现自己的语句操作越界,而这个rangeCheck操作主要是在代码内部进行,所以声明为private而不声明为public。

2.HashSet原理

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

答:HashSet用链表数组实现存储,每个列表被称为桶,添加元素时,HashSet会先调用该对象的hashCode()方法得到其hashCode值,根据该值决定该对象在桶中存储位置。如果桶中已有其他元素,则调用加入对象的equals()方法与已有元素进行比较。如果比较结果为假,则将对象插入桶中。如果比较结果为真,则用新的值替换旧的值。如果有两个元素通过equals()方法比较返回true,而它们的hashCode()方法返回值不等,HashSet也会将它们存储在不同的位置。

2.2 选做:尝试分析HashSet源代码后,重新解释1.1

3.ArrayListIntegerStack

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

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

public ArrayIntegerStack(int n) {this.arr = new Integer[n];
}
public ArrayListIntegerStack(){this.list = new ArrayList<Integer>();
}

答:使用内部数组,需提前定好数组大小;使用ArrayList存储,可自动扩容。

3.2 简单描述接口的好处.

答:在功能相类似具体方法又不同时,可以使用相同的方法名,不同的实现,从而根据自己的需求,通过不同的方式来实现。

4.Stack and Queue

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

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

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

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

if(set.size() < 10)for(String str : set){System.out.println(str);}else {   for (int i = 0; i < 10 ; i++) {System.out.println(set.toArray()[i]);}

5.1 实验总结

答:使用TreeSet时,因为其本身就已经有进行排序,只需按要求遍历输出即可。

6.选做:加分考察-统计文字中的单词数量并按出现次数排序

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

6.1 伪代码

6.2 实验总结

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

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

7.2 使用集合类改进大作业

参考资料:
JTable参考项目

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

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

3.1. 码云代码提交记录

3.2. PTA实验

编程(5-1, 5-2, 5-3(选做), 5-6)
实验总结已经在作业中体现,不用写。

转载于:https://www.cnblogs.com/JML1225/p/6680841.html

201521123052《Java程序设计》第7周学习总结相关推荐

  1. 20175317 《Java程序设计》第一周学习总结

    20175317 <Java程序设计>第一周学习总结 教材学习内容总结 本周学习了Java大致的开发步骤,完成了课件自带的习题. 学习了在windows与Linux系统下不同的编译方法,掌 ...

  2. 20155227 2016-2017-2 《Java程序设计》第九周学习总结

    20155227 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联 ...

  3. 20172318 2016-2017-2 《Java程序设计》第一周学习总结

    20172318 2016-2017-2 <Java程序设计>第一周学习总结 教材学习内容总结 在教材中基本明白了计算机系统的运行方式,了解了对于高级语言是使用是掌握好编程的关键,掌握了一 ...

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

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

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

    20175208 2018-2019-2 <Java程序设计>第九周学习总结 一.教材学习内容总结: 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系 ...

  6. 20175204 张湲祯 2018-2019-2《Java程序设计》第九周学习总结

    20175204 张湲祯 2018-2019-2<Java程序设计>第九周学习总结 教材学习内容总结 -第十一章JDBC和MySQL数据库要点: 1.下载MySQL和客户端管理工具navi ...

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

    20155313 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 1.1 基本类型 整数:可细分为short整数(占2字节).int整数(占4字节)与long ...

  8. 20155226 2016-2017-2 《Java程序设计》第一周学习总结

    20155226 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 第一周主要学习了一二章的内容,也浏览了剩余章节,以下是本周主要学习内容总结 1.首先了解了[ ...

  9. 20172325 2018-2019-1 《Java程序设计》第二周学习总结

    20172325 2018-2019-1 <Java程序设计>第二周学习总结 教材学习内容总结 3.1集合 集合是一种聚集.组织了其他对象的对象.集合可以分为两大类:线性集合和非线性集合. ...

  10. 张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结

    20162329 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机 ...

最新文章

  1. 如何保护Ubuntu 16.04上的NGINX Web服务器
  2. Dvbbs8严重漏洞
  3. 第三次作业:个人项目-小学四则运算 “软件”之初版
  4. LeetCode【13--罗马数字转整数】LeetCode【14--最长的公共前缀】
  5. Find a way——BFS
  6. [MySQL FAQ]系列 -- 数据不算大,备份却非常慢
  7. 《相关性准则——大数据时代的高效能之道》一一2.3 数字信息
  8. 计算机招聘网站排名,2014年互联网名企招聘人数的高校
  9. mysql for centos_CentOs中mysql的安装与配置
  10. 微信红包技术架构首次流出,贼牛逼啊!
  11. PDF转JPG的工具
  12. html自动随机跳转网址,网页随机跳转代码
  13. 勒让德多项式学习笔记
  14. Node.JS EXCEL 读取操作
  15. SPSS卡方检验结果解读详解
  16. 芬兰建筑师帕特里克•艾瑞克森先生一行再次到访云创
  17. 关于电信路由猫、无线路由猫的设置
  18. Entry name AndroidManifest.xml collided
  19. IU酒店释放轻中端投资活力,开启曲靖酒店新篇章
  20. PHP折算,PHP实现货币换算的方法_PHP

热门文章

  1. keepalived(2)——配置文件
  2. 拷贝构造函数 c语言中文网,C++对象的复制
  3. java 转换 unicode_JAVA中最方便的Unicode转换方法
  4. 分数化成有限小数的方法_[153]各种循环小数化成分数的方法归纳
  5. oracle归档目录莫名删除,Oracle归档目录被自动删除的bug
  6. 密码学AES算法_S盒_C值搜索
  7. [BUUCTF-pwn]——wustctf2020_name_your_dog
  8. oracle指令df,怎么使用df命令查看Linux磁盘空间?
  9. 学习记录-class与namespace的区别
  10. Eclipse-cvs指南