201521123039 《java程序设计》第七周学习总结
1. 本周学习总结

2. 书面作业
ArrayList代码分析
1.1 解释ArrayList的contains源代码

答:ArrayList的Contains的源码如上图所示,如果o为null,那么就去找elementData数组是否有为null的对象,如果有则返回下标,没有则返回-1。如果o不为null,就通过equals去比较elementData数组中的元素是否有与o相同的对象,如果有则返回下标,没有则返回-1。这里判断 o==null主要就用来确定是否要使用 o.equals(),最终contains方法就是如果有包含这个元素泽返回ture,否则返回false。
1.2 解释E remove(int index)源代码

答:E remove(int index)源代码如上图所示,先判断是否越界,然后获取从要移除的元素index开始到最后一个元素的个数,再将elementData数组index+1位置开始复制到elementData从index开始的空间,最后使数组的size减1,最终remove方法会返回要移除的那个数。
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的类型吗?
答:不用考虑,ArrayList存储的数据都要是引用类型,而且ArrayList存储数据实际上是用Object的数组,之前有说过Object类是所有类的默认父类,所以除了基本类型就不需要考虑存储元素的类型了。
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?



答:add是在list的末尾进行操作的,ensureCapacityInternal()确保数组有空间给新加进来的元素,如果需要加进来的空间比当前的空间大的话,就会使用grow()方法来进行扩容,grow中的Increases the capacity to ensure that it can hold at least the number of elements specified by the minimum capacity argument.(增加能力以确保它能够容纳至少由最小容量参数指定的元素数量。)说明add内部数组容量不够时可以扩大容量直到可以满足条件为止。
1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?

答:因为该方法只是用来判断给定的索引是否在范围内,有没有越界,外部并不需要访问它,更不能修改它,只需要知道结果就好,所以声明为private即可。
HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
答:向散列表中插入一个新元素时,首先会调用hashCode()方法得到相应的散列码,根据散列码,决定存储位置,除此之外,Set中的元素是唯一的,所以要使用equals()方法确保对象的唯一性,若equals()方法返回值为假,则把新元素插入散列表中,如果返回值为真,则用新的元素替换旧的值。
2.2 选做:尝试分析HashSet源代码后,重新解释1.1
ArrayListIntegerStack
题集jmu-Java-05-集合之5-1 ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)
答:这次的是使用ArrayList来实现的,上次的是使用Integer数组来实现的。上次的push和pop都需要用到top指针,这次的需要用到remove。
public Integer pop() { //ArrayListIntegerStack
if(list.isEmpty())
return null;
return list.remove(list.size()-1);
}
public Integer pop() { //ArrayIntegerStack
top--;
if(top==-1){
top++;
return null;
}
return array[top];
}
3.2 简单描述接口的好处.
答:接口本身只是定义了几个方法,没有实际意义,具体的实现是要在实现它的类中进行的,比如ArrayListIntegerStack和ArrayIntegerStack这两个类都实现了IntergerStack这个接口,但是它们中间的一些实现方法不同,如上题说到的push和pop方法不同,修改一个类中的push方法并不会影响到另一个类中的push方法,这就是接口的好处。
Stack and Queue
4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈,但不能使用java的Stack类(具体原因自己搜索)。请粘贴你的代码,类名为Main你的学号。
public class Main201521123039 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
StringStack s = new ArrayListStringStack();
String str = input.next();
int a = 1;
for (int i = 0; i < str.length(); i++) {
s.push(String.valueOf(str.charAt(i)));//把输入的字符串分成一个个字符存入栈
}
for (int j = 0; j < str.length(); j++) {
if (String.valueOf(str.charAt(j)).equals(s.pop()));//出栈的结果和入栈的相比较
else
a = 0;//如果出栈和入栈的结果不同,则把0赋值给a,否则a值不变
}
if (a == 1)
System.out.println("该字符串是回文!");
else
System.out.println("该字符串不是回文!");
}
}
4.2 题集jmu-Java-05-集合之5-6 银行业务队列简单模拟。(不要出现大段代码)
while(!qa.isEmpty()){
if(!qa.isEmpty()){
qc.add(qa.poll());
qc.add(qa.poll());
}
if(!qb.isEmpty())
qc.add(qb.poll());
}
while(!qc.isEmpty()){
int j=0;
if(j<qc.size()-1){
System.out.print(qc.poll()+' ');
++j;
}
else
System.out.print(qc.poll());
}
题目要求A窗口处理完2个,B窗口才处理完一个,为了方便输出,先把2个队列合并为一个再输出,最后一定要注意不要留有空格!
统计文字中的单词数量并按单词的字母顺序排序后输出
题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (不要出现大段代码)
while(input.hasNext()){
String str=input.next();
if(str.equals("!!!!!"))
break;
if(!list.contains(str))
list.add(str);
}
System.out.println(list.size());
Collections.sort(list);

5.1 实验总结
总结:一开始写的时候没有考虑重复的单词,所以没使用contains方法,直接使用数组,最后统计出来的是所有的单词数量为60。
选做:加分考察-统计文字中的单词数量并按出现次数排序
题集jmu-Java-05-集合之5-3 统计文字中的单词数量并按出现次数排序(不要出现大段代码)
6.1 伪代码
if(映射表中有这个单词)
n加1;
else
map.put(该单词);
sort(映射表);
输出map.size;
输出排名前10的单词及数量;

6.2 实验总结
总结:当时没注意Map<String, Integer>的String和Interger的顺序,所以在写sort函数的时候,在Comparator上出了问题,后来解决了。
面向对象设计大作业-改进
7.1 完善图形界面(说明与上次作业相比增加与修改了些什么)
7.2 使用集合类改进大作业
3.1. 码云代码提交记录

我的码云好像出了问题了。。。提交就会出现下面的提示

3.2. PTA实验
实验总结已经在作业中体现,不用写。
201521123039 《java程序设计》第七周学习总结的更多相关文章
- 201521123027 <java程序设计>第七周学习总结
1.本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: 源代码: //contains()方法 public boolean c ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第七周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第七周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
- 20175317 《Java程序设计》第九周学习总结
20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...
随机推荐
- ORACLE处理用户进程大剖析[阅读]
下面我们要讲ORACLE服务器进程如何处理用户进程的请求,当一个用户进程发出了一条SQL语名: UPDATE TABBLEA SET SALARY=SALARY*2: 首先,服务器进程把这条语 ...
- SQL视图&触发器
SQL视图 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表. 视图包含行和列,就像一个真实的表.视图中的字段就是来自一个或多个数据库中的真实的表中的字段.我们可以向视图添加 SQL 函数 ...
- win7(iis7)localhost可以访问127.0.0.1不可以访问的问题解决办法
在C:\Windows\System32\drivers\etc文件夹下有hosts文件,用编辑器打开,看看有没有配置127.0.0.1 localhost 把前面的#去掉保存即可!
- Python 对象引用、可变性和垃圾回收
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } 变量不是盒子 在示例所示的交互式控制台中,无法使用"变量是盒 ...
- node.js之setTimeout()、clearTimeout()与 setInterval()与clearInterval()
1.setTimeout函数与clearTimeout函数 setTimeout(cb,ms,[arg],[...])延时一定时间执行回调函数该函数中cb参数为必填函数,为需要执行的回调函数ms为经过 ...
- css知识点
css知识点 一.盒模型知识 border: 边框 border-width:边框的宽度 border-color:边框的颜色 border-style:边框的线型 border-top:上边框 bo ...
- Zim学习笔记 (Fedora)
俗话说好记性不如烂笔头, 对于一个搞IT的人来说最好的笔毫无疑问就应该是电脑了, 但最好的本呢? 之前一直在找一款适合自己的笔记软件, 找来找去只有Zim适合自己, 当然对于有编辑器之神之美誉的ema ...
- Tomcat8安装及配置教程
Apache Tomcat8.0安装及配置教程.. Apache Tomcat8.0官方网站链接:http://tomcat.apache.org/ apache-tomcat-8.0.39-wi ...
- Js原生轮播-直接上代码
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8&qu ...
- 使用Coding.net+Hexo+node.js+git来搭建个人博客
使用Coding.net来搭建基于Hexo的博客 一.准备工作 什么是Coding.net Coding可以说,就是国产的Github,但是,有一个功能使它似乎超越了GitHub-那就是 Web ID ...