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程序设计》第七周学习总结的更多相关文章

  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. [NOIP模拟赛]约会date LCA(顺便填坑)

    这道题也算是厉害了,改了整整俩小时最后发现是深信的LCA打错了,悲伤啊!信仰崩塌了! 顺便复习LCA,给出模板 void init(){//p[i][j]表示i节点2^j的祖先 int j; for( ...

  2. [Usaco2007 Open]Fliptile 翻格子游戏 状态压缩

    考试想到了状压,苦于T1废掉太长时间,于是默默输出impossible.. 我们知道,一个格子的翻转受其翻转次数和它相邻翻转次数的影响. 由每一个位置操作两次相当于把它翻过来又翻回去,所以答案中每一个 ...

  3. Entity Framework 帮助文档

    Entity Framework (EF) 帮助文档 在代码中定义实体,并生成数据库模型 原文链接 基于已有数据库创建 Code First 实体模型 原文链接 Entity Framework Fl ...

  4. eclipse中配置spring环境

    初识Spring框架 1.简单使用 eclipse中配置Spring环境,如果是初学的话,只需要在eclipse中引入几个jar包就可以用了, 在普通java project项目目录下,建一个lib文 ...

  5. C/C++ 知识点---数组与指针

    数组和指针是两种不同的类型,数组具有确定数量的元素,而指针只是一个标量值.数组可以在某些情况下转换为指针,当数组名在表达式中使用时,编译器会把数组名转换为一个指针常量,是数组中的第一个元素的地址,类型 ...

  6. C++中printf和scanf的用法

    (一)printf的用法 printf:按格式打印,向控制台输出.print:打印 ,f:formate,格式化. 在使用printf向控制台输出时,不建议使用中文字符串,中文字符串的问题比较复杂,有 ...

  7. Lua语法要点

    本文在我的独立博客中的链接:https://www.bughui.com/2017/04/01/lua-grammar-points/ 这篇文章其实是我在四月一号发布的,由于我重新注册了一个博客园帐号 ...

  8. 神经网络与深度学习笔记 Chapter 3.

    交叉熵 交叉熵是用于解决使用二次代价函数时当单个神经元接近饱和的时候对权重和bias权重学习的影响.这个公式可以看出,当神经元饱和的时候,sigma的偏导接近于0,w的学习也会变小.但是应用交叉熵作为 ...

  9. java核心技术之流与文件

    InputStream和OutputStream构成了输入/输出类层次结构的基础.用于按字节进行读写.而与之处在同一等级的Reader/Writer同样作为抽象类定义了用于对字符进行读取的类层次结构, ...

  10. 【Oracle】环境变量与监听文件

    一.环境变量的及其含义: 数据库主目录 ORACLE_HOME=D:\app\Administrator\product\11.2.0\dbhome_1 监听文件所在目录 TNS_ADMIN=D:\a ...