201621123018《Java程序设计》第8周学习报告
1. 本周学习总结
以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。
2. 书面作业
1. ArrayList代码分析
1.1 解释ArrayList的contains源代码
contanis
方法用indexOf来判断,有点像遍历数组一样,一个一个元素比较过去,其中也用到了equals
方法。
1.2 解释E remove(int index)源代码
先找到所要删除的元素,然后将其一处,然后将后续元素全部往前移动,长度减一。
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的具体类型吗?
不需要,因为Object类为所有类的父类。
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
会调用grow
方法,来扩大数组容量
1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?
因为该方法是用来判断数组是否越界,不需要让外界来访问它。
2. HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
- 当我们象
HashSet
添加元素是,HashSet
会调用hashCode()
方法计算出hashCode
值,就确定了元素的存储位置。如果桶中已经有其他元素,就调用equals()
方法与已有元素比较,如果比较结果为假,则将对象插入。如果比较结果为真,则用新的值替换旧的值 - 调用了
hashCode()
方法和equals()
方法
2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)
O(1)
2.3 选做:尝试分析HashSet源代码后,重新解释2.1
3. ArrayListIntegerStack
题集jmu-Java-05-集合之ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)
ArrayListIntegerStack
使用动态数组;ArrayIntegerStack
使用数组。ArrayListIntegerStack
调用ArrayList
自身的方法来实现操作,ArrayIntegerStack
用指针top
来实现操作
3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。
接口只写了方法名,没有具体的实现过程,可以有多种实现方法。
4. Stack and Queue
4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈(请利用Java集合中已有的类),但不能使用java的Stack类(具体原因自己搜索)与数组。请粘贴你的代码,类名为Main你的学号。
package week08;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
class ArrayIntegerStack implements IntegerStack{
private List<Character> arrlist = new ArrayList<Character>();
public void push(char c) {
arrlist.add(c);
}
@Override
public void pop() {
arrlist.remove(arrlist.size()-1);
}
@Override
public Character peek() {
char temp = arrlist.get(arrlist.size()-1);
return temp;
}
@Override
public boolean empty() {
if(arrlist.size()==0)
return true;
return false;
}
@Override
public int size() {
return arrlist.size();
}
}
interface IntegerStack<ArrayIntegerStack> {
public void push(char c);
public void pop();
public Character peek();
public boolean empty();
public int size();
}
public class Main201621123018{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
ArrayIntegerStack stack = new ArrayIntegerStack();
String str = in.next();
char[] ch = str.toCharArray();
for (char c : ch) {
stack.push(c);
}
int flag = 1;
for (int i = 0; i < stack.size(); i++) {
if(ch[i] != stack.peek()){
flag = 0;
break;
}
stack.pop();
}
if(flag==0)
System.out.println("不是回文");
else
System.out.println("是回文");
}
}
4.2 题集jmu-Java-05-集合之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue接口,并说明你使用了Queue接口的哪一个实现类?
while(!(queueA.isEmpty() && queueB.isEmpty())){
if(queueA.isEmpty()){
while(!queueB.isEmpty()){
temp.add(queueA.poll());
}
}
if(queueB.isEmpty()){
while(!queueA.isEmpty()){
temp.add(queueA.poll());
}
}
if(!queueA.isEmpty() && !queueB.isEmpty()){
if(queueA.size() == 1)
temp.add(queueA.poll());
if(queueA.size() >= 2){
temp.add(queueA.poll());
temp.add(queueA.poll());
}
temp.add(queueB.poll());
}
}
用了LinkedList
实现类
5. 统计文字中的单词数量并按单词的字母顺序排序后输出
题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (作业中不要出现大段代码)
5.1 实验总结
本题用到了TreeSet
,利用了其排序的功能,在定义一个flag
来控制输出前是个单词
while(true){
String word = in.next();
if(word.equals("!!!!!"))
break;
words.add(word);
}
int flag = 0;
for (String e : words) {
if(flag == 10)
break;
System.out.println(e);
flag++;
}
6. 选做:统计文字中的单词数量并按出现次数排序
题集jmu-Java-05-集合之5-3 统计文字中的单词数量并按出现次数排序(不要出现大段代码)
6.1 伪代码
6.2 实验总结
本题运用到了HashMap
,key
表示单词,value
表示单词出现次数。程序中主要完成两个部分,一个是将key
与value
对应起来,另一个是要实现key
和value
的排序。
while(true){ //key和value对应
String word = in.next();
if(word.equals("!!!!!"))
break;
if(map.get(word) == null){
map.put(word, new Integer(1));
}
else{
Integer temp = (Integer)map.get(word);
temp = new Integer(temp.intValue()+1);
map.put(word, temp);
}
}
//排序
List<Map.Entry<String, Integer>> infoIds =new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
if(o2.getValue() - o1.getValue()==0)
return (o1.getKey()).toString().compareTo(o2.getKey());
return (o2.getValue() - o1.getValue());
}
});
3.码云及PTA
题目集:jmu-Java-05-集合
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
3.2 截图PTA题集完成情况图
需要有两张图(1. 排名图。2.PTA提交列表图)
3.3 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 160 | 160 | 49 | 49 |
2 | 387 | 227 | 55 | 6 |
3 | 630 | 243 | 59 | 4 |
4 | 968 | 238 | 65 | 5 |
5 | 1171 | 203 | 69 | 4 |
6 | 1626 | 445 | 77 | 8 |
7 | 2061 | 435 | 80 | 3 |
8 | 2385 | 324 | 86 | 6 |
201621123018《Java程序设计》第8周学习报告的更多相关文章
- 20145326《Java程序设计》第一周学习总结
20145326<Java程序设计>第一周学习总结 教材学习内容总结 转眼间新的一学期终于开始了!为什么我这么期待呢?因为这学期可以上娄嘉鹏老师的java程序设计课,我不是什么电脑天才,之 ...
- 20155328 2016-2017-2 《Java程序设计》第九周学习总结
20155328 2016-2017-2 <Java程序设计>第九周学习总结 教材学习内容总结 16.1 JDBC入门 JDBC是Java联机数据库的标准规范,定义一组标准类与接口,应用程 ...
- 20155319 2016-2017-2 《Java程序设计》第一周学习总结
20155319 2016-2007-2 <Java程序设计>第一周学习总结 考核方式 翻转课堂考核12次(5*12=60):每次考试20-30道题目,考试成绩规格化成5分(如总分20分就 ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 20145213《Java程序设计》第一周学习总结
20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145330孙文馨 《Java程序设计》第一周学习总结
20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...
- 20145337 《Java程序设计》第九周学习总结
20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...
- 20145337 《Java程序设计》第二周学习总结
20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...
随机推荐
- java20(判断是否为会员)
1.不确定数组是哪个类型是,将数据类型换成类名 2.记得将判断的参数传到方法中 3.用到类名的: 创建对象时 创建未知类型的数组时 4.创建的对象所用到的名字,体重,判断(boolean isvip ...
- Enjoy Markdown!
有一个神奇的语言,比HTML简单,它巧妙地将内容与格式结合在一起,它就是Markdown! 下面是一个用C语言写的四则运算小测试~ #include <stdio.h> #include ...
- Yii2 数据库查询汇总
1.基础查询 User::find()->all(); 此方法返回所有数据: User::findOne($id); 此方法返回 主键 id=1 的一条数据(举个例子): User::find( ...
- 使用PostSharp在.NET平台上实现AOP(转)
出处:https://www.cnblogs.com/leoo2sk/archive/2010/11/30/aop-postsharp.html 摘要 本文首先介绍AOP(面向方面编程)的相关概念及理 ...
- Netty4.x 源码实战系列(一): 深入理解ServerBootstrap 与 Bootstrap
转载自:https://www.cnblogs.com/itdriver/p/8149913.html 从Java1.4开始, Java引入了non-blocking IO,简称NIO.NIO与传统s ...
- windows下,将MySQL做成服务/脚本启动
将mysql作为服务启动 假设数据库安装在:c:\Program Files\mysql 目录下 进入mysql的安装目录bin下 cd c:\Program Files\mysql\bin ...
- Angularjs的directive封装ztree
一般我们做web开发都会用到树,恰好ztree为我们提供了多种风格的树插件. 接下来就看看怎么用Angularjs的directive封装ztree <!DOCTYPE html> < ...
- 20155205 2016-2017-2 《Java程序设计》第7周学习总结
20155205 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十二章 只要静态方法的方法命名中参数于返回值定义相同,也可以使用静态方法来定义函数接口操作 ...
- C#时间操作总结
命名空间:System.Diagnostics Stopwatch 实例可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.在典型的 Stopwatch 方案中,先调用 Start 方 ...
- Android学习指南之三十八:Android手势操作编程[转]
手势操作在我们使用智能设备的过程中奉献了不一样的体验.Android开发中必然会进行手势操作方面的编程.那么它的原理是怎样的呢?我们如何进行手势操作编程呢? 手势操作原理 首先,在Android系统中 ...