201621123043 《Java程序设计》第8周学习总结
1. 本周学习总结
2. 书面作业
1. ArrayList代码分析
1.1 解释ArrayList的contains源代码
contains的源代码如下
public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object o) { //遍历元素看是否存在元素“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;
}
由源代码可见,contains
函数是调用indexOf(o)
方法 ,而indexOf(o)
里面又调用equals()方法
最终函数的功能是:如果此列表中包含指定的元素,则返回 true,否则返回false。
1.2 解释E remove(int index)源代码
remove(int index)源代码如下
public E remove(int index) {
rangeCheck(index);
modCount++; //修改次数+1
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved); //System类中的一个本地方法复制
elementData[--size] = null; // 删除数组最后一个元素并修改大小
return oldValue;
}
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
由源代码可知:先调用了rangeCheck方法来判断数组是否越界,再删除指定位置的元素 ,并且修改数组长度。
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的具体类型吗?
不需要,因为数组中存放的元素的类型为Object类型(超级父类)
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
//将数据添加尾部的add方法
public boolean add(E e) {
ensureCapacityInternal(size + 1); // Increments modCount!!
elementData[size++] = e;
return true;
}
private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
private void ensureExplicitCapacity(int minCapacity) {
modCount++;
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
首先调用了ensureCapacityInternal
方法判断是否要进行数组的扩容,在调用调用ensureExplicitCapacity
实现数组的扩容。最后再修改对象数组的长度。ArrayList对象没有指定长度时,初始容量会初始化为10.
1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?
rangeCheck(int index)用来判断数组是否越界,只需在romove类里使用,所以声明private就好啦
2. HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
先调用
hashCode
方法计算元素的哈希码值,然后由哈希码的值算出元素的存储位置
如果指定的位置没有值的话,则将元素添加到哈希表中,
但是如果算出的位置上已经有了一个值的话,就要调用equals
方法比较该位置上的值和待加入的值
如果两个值相同则不将元素添加进哈希表,因为HashSet
不会存储重复的元素,如果两个值不同
就使用解决冲突的方法将元素添加到相应的哈希表的位置中。
2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)
O(1),因为是以哈希表实现的,无序的
2.3 选做:尝试分析HashSet源代码后,重新解释2.
3. ArrayListIntegerStack
题集jmu-Java-05-集合之ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目自定义接口ArrayIntegerStack,有什么不同?
主要是储存方式的不一样,一个是用数组储存元素,一个则是用动态数组来储存。因为储存方式的不一样,导致类中的方法的实现方式不一样,两种本质上思路是差不多的。
3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。
本题是先定义了一个栈的接口里面放一些栈的方法名定义,然后在定义一个栈的方法具体实现类,最后再用Main调用自定义栈类。
这样的好处是:代码结构清晰,简单易懂,易于维护和拓展,增强了代码的灵活性。
4. Stack and Queue
4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈(请利用Java集合中已有的类),但不能使用java的Stack类(具体原因自己搜索)与数组。请粘贴你的代码,类名为Main你的学号。
//接口定义
public interface CharStackFace {
public char push(char a);
public char pop();
public char peek();
}
//接口的实现类
import java.util.ArrayList;
import java.util.List;
public class CharStack implements CharStackFace {
List<Character> ArrList = new ArrayList<Character>();
public char push(char a) {
if(ArrList == null)
return 0;
ArrList.add(a);
return a;
}
public char pop() {
if(ArrList.isEmpty())
return 0;
return ArrList.remove(ArrList.size()-1);
}
public char peek() {
if(ArrList.size()==0)
return 0;
return ArrList.get(ArrList.size()-1);
}
@Override
public String toString() {
return ArrList.toString();
}
}
//判断是否回文的Main函数
import java.util.Scanner;
public class Main201621123043 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
CharStack CS1 = new CharStack();
CharStack CS2 = new CharStack();
CharStack CS3 = new CharStack();
String str = sc.nextLine();
char[] s = str.toCharArray();
for(int i=0; i<s.length;i++) {
CS1.push(s[i]);
}
for(int i=0; i<s.length;i++) {
CS3.push(s[i]);
}
for(int i=0; i<s.length;i++) {
CS2.push(CS3.pop());
}
if(CS1.toString().equals(CS2.toString()))
System.out.println("回文");
else
System.out.println("不回文");
}
}
4.2 题集jmu-Java-05-集合之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue接口,并说明你使用了Queue接口的哪一个实现类?
//两个队列的定义
Queue<Integer> listA = new LinkedList<Integer>();
Queue<Integer> listB = new LinkedList<Integer>();
//入队操作
for (int i = 0; i < m; i++) {
int a = sc.nextInt();
if (a % 2 == 1)
listA.add(a);
else
listB.add(a);
}
//业务处理
while(!qA.isEmpty()&&!qB.isEmpty()){//A和B队列煤油同时都为空
if(!qA.isEmpty()){ //A队列不为空
System.out.print(qA.poll()+" ");
if(!qA.isEmpty()) //A队列一次输出两个
System.out.print(qA.poll()+" ");
}
Integer i = qB.poll();
if(qA.isEmpty()&&qB.isEmpty())
System.out.print(i); //对最后一个元素做特殊处理
else
System.out.print(i+" ");
}
while (!qA.isEmpty()) {
for (int i = 0; i < qA.size() - 1; i++) {
System.out.print(qA.poll() + " ");
}
System.out.print(qA.poll());
}
while (!qB.isEmpty()) {
for (int i = 0; i < qB.size() - 1; i++) {
System.out.print(qB.poll() + " ");
}
System.out.print(qB.poll());
}
}
}
使用了Queen 的LinkedList实现类
5. 统计文字中的单词数量并按单词的字母顺序排序后输出
题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (作业中不要出现大段代码)
5.1 实验总结
1.使用TreeSet来存储数据,其不仅具有具有排序功能且能够不添加重复的元素
Set <String> words = new TreeSet<>();
2.使用next()方法可不用分割字符,直接输入一个单词便存入TreeSet中
3.遍历TreeSet并输出(注意输出前十个单词的方法)
for(String e : words){
if(i++<10)
System.out.println(e);
}
6. 选做:统计文字中的单词数量并按出现次数排序
题集jmu-Java-05-集合之5-3 统计文字中的单词数量并按出现次数排序(不要出现大段代码)
6.1 伪代码
6.2 实验总结
7. 选做 面向对象设计大作业-改进
7.1 使用集合类改进大作业或者简述你的面向对象设计大作业中,哪里使用到了集合类。
7.2 进一步完善图形界面(仅需出现改进的后的图形界面截图)
参考资料:
JTable参考项目
3.码云及PTA
3.1. 码云代码提交记录
3.2 截图PTA题集完成情况图
3.3 统计本周完成的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 0 | 0 | 0 | 0 |
2 | 0 | 0 | 0 | 0 |
3 | 0 | 0 | 0 | 0 |
4 | 0 | 0 | 0 | 0 |
5 | 488 | 488 | 23 | 23 |
6 | 488 | 0 | 23 | 0 |
7 | 1292 | 804 | 42 | 19 |
8 | 1630 | 338 | 45 | 3 |
9 | 1798 | 168 | 53 | 8 |
需要将每周的代码统计情况融合到一张表中。
选做:4. 使用Java解决实际问题
尝试为代码统计项目 增加图形界面。
3.1 设计图形界面(可用纸画)。
3.2 从该git项目fork一个分支,在该分支上进行你的开发,以后如果开发的好,可以尝试向开发者提出pull request。注意:规划好包名。
201621123043 《Java程序设计》第8周学习总结的更多相关文章
- 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 ...
- 20145218《Java程序设计》第一周学习总结
20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...
- 《Java程序设计》第九周学习总结
20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...
- 《Java程序设计》第二周学习总结
20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...
随机推荐
- RobotFramework下的http接口自动化Set Request Header 关键字的使用
Set Request Header 关键字用来设置http请求时的请求头部信息. 该关键字接收两个参数,[ header_name | header_value ] 示例1:设置http请求时的Re ...
- C#多线程编程(3)--开启子任务
上一篇我讲解了await和async关键字,这两个关键字的作用是将async限定的方法中await关键字后面的部分封装成一个委托,该委托会在await修饰的Task完成后再执行.简单的说,就是等待任务 ...
- php 目录处理函数
之前我们处理的全都是文件,那目录和文件夹怎么处理呢? 我们就来学习目录或者称为文件夹的处理相关函数. 处理文件夹的基本思想如下: 1.读取某个路径的时候判断是否是文件夹 2.是文件夹的话,打开指定文件 ...
- VHDL和verilog应该先学哪个?
网上有太多的VHDL和verilog比较的文章,基本上说的都是VHDL和verilog之间可以实现同一级别的描述,包括仿真级.寄存器传输级.电路级,所以可以认为两者是等同级别的语言.很多时候会了其中一 ...
- html学习第二弹の表格的使用方法
>创建表格的四个元素: table.tbody.tr.th.td 1.<table>-</table>:整个表格以<table>标记开始.</table ...
- ccd引脚
- 【python学习笔记】2.列表和元组
# 第二章:列表和元组 序列中,每个元素都有个一个序号,序号以0开始,最后一个元素序号为-1,倒数第二个-2 序列类型包括,列表,元组,字符串,unicode字符串,buffer, xrange ...
- python 检测nginx状态,若无法访问发邮件通知
应用场景:用来检测网站可用性,访问失败,则发邮件通知 #!/usr/bin/env python import urllib2,time,smtplib,string,logging from con ...
- 进程优化工具Process Lasso Pro 8.4官方版+激活破解方法
Process Lasso是一款来自美国的系统进程优化工具,基于特殊算法动态调整进程的优先级别,通过合理的设置进程优先级来实现降低系统负担的功能.可有效避免蓝 屏.假死.进程停止响应.进程占用 CPU ...
- WebCracker4.0和monster字典——路由器登陆密码破解工具
路由器登陆密码破解,很伤cpu的