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. 从Javascript单线程谈Event Loop

    假如面试回答js的运行机制时,你可能说出这么一段话:"Javascript的事件分同步任务和异步任务,遇到同步任务就放在执行栈中执行,而碰到异步任务就放到任务队列之中,等到执行栈执行完毕之后 ...

  2. pwntools使用简介2

    大致框架 官网的一个简单样例 from pwn import * context(arch = 'i386', os = 'linux') r = remote() # EXPLOIT CODE GO ...

  3. HDU 4372 Count the Buildings:第一类Stirling数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4372 题意: 有n栋高楼横着排成一排,各自的高度为1到n的一个排列. 从左边看可以看到f栋楼,从右边看 ...

  4. Linux内存详解

    --Linux内存详解 -----------------2014/05/24 Linux的内存上表现的不像windows那么直观,本文准备详细的介绍一下Linux的内存. 请看这下有linux命令f ...

  5. Python2和Python3的一些语法区别

    Python2和Python3的一些语法区别 python 1.print 在版本2的使用方法是: print 'this is version 2 也可以是 print('this is versi ...

  6. python--------------常用模块之正则

    一.认识模块  什么是模块:一个模块就是一个包含了python定义和声明的文件,文件名就是加上.py的后缀,但其实import加载的模块分为四个通用类别 : 1.使用python编写的代码(.py文件 ...

  7. 状态机/迭代器/LINQ/协程

    状态机 有限状态机(Finite State Machine 或 Finite State Automata)是软件领域中一种重要的工具. 状态机允许一个对象在其内部状态改变时改变它的行为.对象内部状 ...

  8. Use Select To Generate Any Insert/Delete/Update Statement

    If you don't have the permission to generate script according to an existing db, but you have the re ...

  9. Java获取精确到秒的时间戳(转)

    1.时间戳简介: 时间戳的定义:通常是一个字符序列,唯一地标识某一刻的时间.数字时间戳技术是数字签名技术一种变种的应用.是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01 ...

  10. Sql Server数据库使用触发器和sqlbulkcopy大批量数据插入更新

    需要了解的知识 1.触发器 2.sqlbulkcopy 我的用途 开发数据库同步的工具,需要大批量数据插入和数据更新. 方式 使用SqlBulkCopy类对数据进行数据批量复制,将需要同步数据的表新建 ...