1. 本章学习总结

2. 书面作业

Q1. ArrayList代码分析

1.1 解释ArrayList的contains源代码

  答:代码如下
 public boolean contains(Object o) {
return indexOf(o) >= 0;
}
public int indexOf(Object 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;
}
public boolean equals(Object obj) {
return (this == obj);
}
 contains方法返回indexOf(o)》=0;indexOf方法先判断o是否为空,若为空则返回-1,跳出,程序false,不为空则执行下一步,判断elemenData【i】是否为空,为空返回i,i++重新判断,若不为空则执行equals方法,equals方法的作用是判断o和elemenData【i】是否相等,若相等则返回序号i,

1.2 解释E remove(int index)源代码

 答:代码如下
public E remove(int index) {
rangeCheck(index); modCount++;
E oldValue = elementData(index); int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // clear to let GC do its work return oldValue;
}
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
 remove的源代码是执行删除操作,先rangCheck()判断index是否超过数组大小,若超过则抛出IndexOutOfBoundsException()异常,不超过执行删除,然后后一个补前一个,到最后size-1为空,在处理掉。

1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的类型吗?

 答:需要,java中,数组可以存放基本数据类型,而集合就不行,集合中存放的必须是对象。但可以转换。将基本数据类型转换为对象

1.4 分析add源代码,回答当内部数组容量不够时,怎么办?

 答:代码如下
public boolean add(E e) {
ensureCapacityInternal(size + 1);
elementData[size++] = e;
return true;
} private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
} ensureExplicitCapacity(minCapacity);
}
modCount++;
if (minCapacity - elementData.length > 0)
grow(minCapacity);
} private void grow(int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}
如果超出容量,则调用grow方法增加到一点五倍容量。把旧数组拷贝至新数组,并不是增加原来数组的大小,而是引用了一个大小为原来数组1.5倍的新数组。

1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?

 答:代码如下
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
private的属性是只能被包里或子类访问,不能被外部访问,所以显然是为了防止被外部的访问。

Q2.HashSet原理

2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?

 答:确定储存地址需要调用hashCode方法计算地址,根据哈希码找到对应的捅,如果桶中已有元素,调用equals比较对象是否相等,若不相等将值插入,相等用新值替换旧值。用到hashCode()和equals()方法。

2.2 选做:尝试分析HashSet源代码后,重新解释1.1

 答:分析完了,至少我知道的都在上面了。

Q3.ArrayListIntegerStack 题集jmu-Java-05-集合之5-1 ArrayListIntegerStack

3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)

 答:主要区别:动态数组和内部实现数组,ArrayListIntegerStack内部使用ArrayList动态对象存储。jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3自定义接口ArrayIntegerStack内部使用Integer数组储存。因为动态数组和普通数组的区别出栈和入栈也会有区别。

3.2 简单描述接口的好处.

 答:接口可以有多个实现,一个类可以实现多个接口,所以接口有 简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口;安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务;而不涉及任何具体的实现细节。这样就比较安全、严密一些;

Q4.Stack and Queue

4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈,但不能使用java的Stack类(具体原因自己搜索)。请粘贴你的代码,类名为Main你的学号。

  答:代码如下
	 public static void main(String[] args) {
String str = "201521123053";
System.out.println(str + "回文数:" + isPalindrome(str)); str = "201521123053";
System.out.println(str + "回文数:" + isPalindrome(str));
}
public static boolean isPalindrome(String pValue){
List<Character> stack = new ArrayList<Character>();
List<Character> stack2 = new ArrayList<Character>();
int haflen = pValue.length()/2; for(int i=0;i<haflen;i++){
stack.add(pValue.charAt(i));
stack2.add(pValue.charAt(pValue.length()));
}
boolean bFlag = true;
for(int i=haflen-1;i>=0;i--){
if(stack.remove(i) != stack2.remove(i)){
bFlag = false;
break;
}
}
return bFlag;
}
} }

4.2 题集jmu-Java-05-集合之5-6 银行业务队列简单模拟。(不要出现大段代码)

  答:

Q5.统计文字中的单词数量并按单词的字母顺序排序后输出

题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (不要出现大段代码)

5.1 实验总结

Q6.选做:加分考察-统计文字中的单词数量并按出现次数排序

题集jmu-Java-05-集合之5-3 统计文字中的单词数量并按出现次数排序(不要出现大段代码)

6.1 伪代码

6.2 实验总结

3. PTA实验总结及码云上代码提交记录

3.1本周Commit历史截图

在码云的项目中,依次选择“统计-Commits历史-设置时间段”,然后搜索并截图,如下图所示

3.2 实验总结

实验碰到的问题、思考、收获与解决方案

4. 其他的一些题目,如特别加分的实验题目、小任务、自己用Java做的一些小东西(可选,加分)

201521123053《Java课程设计》第七周学习总结的更多相关文章

  1. 20155337 2016-2017-2 《Java程序设计》第七周学习总结

    20155337 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 •认识时间与日期 •格林威治标准时间:简称GMT时间,参考格林威治皇家天文台的标准太阳时间. ...

  2. 20155336 2016-2017-2《JAVA程序设计》第七周学习总结

    20155336 2016-2017-2<JAVA程序设计>第七周学习总结 教材学习内容总结 第十三章 认识时间与日期 格林威治标准时间:简称GMT时间,参考格林威治皇家天文台的标准太阳时 ...

  3. 201871010135 张玉晶《面向对象程序设计(java)》第七周学习总结

    201871010135  张玉晶<面向对象程序设计(java)>第七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  4. 吴丽丽-201871010123《面向对象程序设计(Java)》第七周学习总结

    吴丽丽-201871010123<面向对象程序设计(Java)>第七周学习总结 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个 ...

  5. 201871010104-陈园园 《面向对象程序设计(java)》第七周学习总结

    201871010104-陈园园 <面向对象程序设计(java)>第七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  6. 201871010105-曹玉中《面向对象程序设计(java)》第七周学习总结

    201871010105-曹玉中<面向对象程序设计(java)>第七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这 ...

  7. 201871010106-丁宣元 《面向对象程序设计(java)》第六—七周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第六—七周学习总结 正文开头 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu- ...

  8. 201871010107-公海瑜《面向对象程序设计(java)》第七周学习总结

    201871010107-公海瑜<面向对象程序设计(java)>第七周学习总结             项目                       内容   这个作业属于哪个课程  ...

  9. 唐敬博-201871010118 《面向对象程序设计(java)》第七周学习总结

    在博客园撰写博客(随笔),总结7周实验内容,作业格式要求如下: 博文名称:学号-姓名<面向对象程序设计(java)>第七周学习总结(1分) 博文正文开头格式:(2分) 项目 内容 这个作业 ...

  10. 张兴盼-201871010131《面向对象程序设计(Java)》第七周学习总结

    张兴盼-201871010131<面向对象程序设计(Java)>第七周学习总结 项目 内容 这个作业属于哪个课程 http://www.cnblogs.com/nwnu-daizh/ 这个 ...

随机推荐

  1. CodeForces 797C Minimal string:贪心+模拟

    题目链接:http://codeforces.com/problemset/problem/797/C 题意: 给你一个非空字符串s,空字符串t和u.有两种操作:(1)把s的首字符取出并添加到t的末尾 ...

  2. 不重启修改mysql root密码

    不重启修改mysql root密码 --------------------2014/09/28 一.一般忘记密码的解决办法,需要重启Mysql1.skip-grant-tables我们常用的方法是使 ...

  3. MATLAB批量读入图片

    %% import pictures, and save into images{img_num} function [images, img_num, vertical_border] = impo ...

  4. 如何实现.5px的线条和.5px的圆角边框

    实现.5px的线条 网络上有很多方法,如设置viewport,box-shawdow,border-image,background-image,transform:scale等,这里不做介绍(百度或 ...

  5. python中金额计算的小问题

    由于二进制对浮点运算存在精度问题,所以一些浮点计算经常会出现以下情况: # -*- coding: utf-8 -*- a = 1 b = 0.9 print(a-b) 结果: 0.099999999 ...

  6. iOS app 的 ASLR

    这两天逆向一个程序,发现每次image list -o -f 之后,它的基地址都是0x00000,也就是偏移地址是0.  想到这个应该是载入内存时有没有启用偏移有关,于是找了下答案:aslr 百度百科 ...

  7. 优化testng报告

    背景 搞过testng的同学都知道,testng自带的报告非常丑,而且有些字段的展示很不人性化,所以需要优化下报告 解决方案 尝试过一下开源的jar包,如ReportNG,奈何和目前使用的allure ...

  8. dotnet使用Selenium执行自动化任务

    如果要做百度文库,百度贴吧,百度知道签到,你,会怎么做?前不久我还会觉得这好像太麻烦了,now,soeasy. 自动化测试工具:Selenium Selenium是一个用于Web应用程序测试的工具.S ...

  9. 三菱Ethernet工业以太网

    1.什么是Ethernet? 1)网络组成信息网和控制网 2)IP地址的概念 3)端口号的概念 4)通信方式,通信协议 5)开放关闭处理 6)要点总结 2.Ethernet模块 1)CUP能够安装的E ...

  10. TechSmith Camtasia Studio屏幕录像编辑工具

    TechSmith Camtasia Studio屏幕录像编辑工具... --------------------------------------------------------- ----- ...