201521123112《Java程序设计》第7周学习总结
1. 本周学习总结
2. 书面作业
1.ArrayList代码分析
1.1 解释ArrayList的contains
源代码
下面先贴出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;
contains(Object o)
作用是判断字符串中是否含有 o ,由于contains是boolean型,所以返回值只有true 和false 。定义一个搜索函数indexOf(Object o)
,如果有搜索到与传入进来的Object一样的值的话,返回i值,i值必然是大于等于0的整数,所以最后在
return indexOf(o) >= 0;
中会返回true,表示字符串中包含 o ,否则return -1,返回false,不包含 o 。
1.2 解释E remove(int index)
源代码
下面先贴出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;
}
首先通过rangeCheck(index);
判断index是否超出界限,numMoved是指被移除的元素后面还有的元素的个数,然后通过arraycopy将index+1往后的元素前移一位,然后数组大小减一,完成操作。
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的类型吗?
ArrayList是专门设计用来存储对象的一个可变大小的类,在存储数据的时候不需要考虑数组元素的类型,会进行自动的转换。
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
下面先贴出ArrayList.add
的源代码:
public boolean add(E e) {
ensureCapacityInternal(size + 1);
elementData[size++] = e;
return true;
}
检查当前集合中是否有空间可以容纳下一个新的元素,如果容不下,则进行扩容,这个方法是在集合的末端扩容。
1.5 分析private void rangeCheck(int index)
源代码,为什么该方法应该声明为private而不声明为public?
这边先贴出源代码:
private void rangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
经过查询资料可以发现rangeCheck会被以下代码调用:
- get(int index)
- set(int index, E element)
- remove(int index)
使用private的原因是不想让用户获取到代码,只要让他知道改代码可以完成某个操作即可。
2.HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
在我们将元素加入HashSet的时候,会先得到HashCode值确定存储位置
- 调用
HashCode()
得到HashCode值 - 调用
equals()
,跟已有的元素进行比较,比较为假,则插入,比较为真,则替换
3.ArrayListIntegerStack
题集jmu-Java-05-集合之5-1
ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类
中的题目5-3自定义接口ArrayIntegerStack
,有什么不同?(不要出现大段代码)
- 在ArrayIntegerStack中,内部使用数组实现栈,而在ArrayListIntegerStack中是使用ArrayList来实现栈操作。
- 因为ArrayIntegerStack是使用数组来实现栈,所以在入栈的时候会出现栈满的状况导致无法入栈,而ArrayListIntegerStack是使用ArrayList,在上边已经说过ArrayList可以实现自动扩容,所以不存在栈满的情况。
3.2 简单描述接口的好处.
- 在接口中定义了抽象的方法,可以很清晰的知道在该代码中会运用到哪些方法,增加代码的阅读性。
- 类可以继承接口实现不同的操作,重写方法,提高效率。
4.Stack and Queue
4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈,但不能使用java的Stack
类(具体原因自己搜索)。请粘贴你的代码,类名为Main你的学号
。
public class Main201521123112 {
public static void main(String[] args) {
Scanner sc=new Scanner (System.in);
String str="201521123112";
System.out.println(isPalindromeNumber(str));
}
private static boolean isPalindromeNumber(String str) {
ArrayListIntegerStack judge=new ArrayListIntegerStack();
char[] charArray = str.toCharArray();
for(int i=0;i<str.length()/2;i++){
judge.push(String.valueOf(charArray[i])); //压入栈中
}
for(int i=charArray.length/2;i< charArray.length;i++ ){
if(judge.pop().equals(String.valueOf(charArray[i])))
return true;
}
return false;
}
interface IntegerStack{
public String push(String item);
public String pop();
public String peek();
public boolean isempty();
}
class ArrayListIntegerStack implements IntegerStack{
private List<String> list;
public ArrayListIntegerStack(){
list=new ArrayList<String>();
}
@Override
public String push(String item) {
if(item.equals("")) return null;
else list.add(item);
return item;
}
@Override
public String pop() {
if(list.size()==0) return null;
else
return list.remove(list.size()-1);
}
@Override
public String peek() {
if(list.size()==0)
return null;
return list.get(list.size()-1);
}
@Override
public boolean isempty() {
return list.size()==0?true:false;
}
}
}
4.2 题集jmu-Java-05-集合之5-6
银行业务队列简单模拟。(不要出现大段代码)
分成奇、偶两队,分别为A、B
按照2:1入队,然后输出队列即可
while (!A.isEmpty() || !B.isEmpty()) {
if(!A.isEmpty()) C.offer(A.poll());
if(!A.isEmpty()) C.offer(A.poll());
if(!B.isEmpty()) C.offer(B.poll());
5.统计文字中的单词数量并按单词的字母顺序排序后输出
题集jmu-Java-05-集合之5-2
统计文字中的单词数量并按单词的字母顺序排序后输出 (不要出现大段代码)
5.1 实验总结
将输入的单词放入TreeSet中:
while(sc.hasNext()){
String a=sc.next();
if(a.equals("!!!!!")) break;
str.add(a);
}
然后将TreeSet转换成Array后,循环输出。
7.面向对象设计大作业-改进
7.1 完善图形界面(说明与上次作业相比增加与修改了些什么)
由于前两次作业大作业没有做完,这次开始做,比较简陋
登录界面用户名或者密码输错,弹出下框:
登录成功进入菜单,添加物品进入购物车结算:
购物车商品列出,结算:
7.2 使用集合类改进大作
3. 码云上代码提交记录及PTA实验总结
3.1. 码云代码提交记录
3.2. PTA实验
- 编程(5-1, 5-2, 5-3(选做), 5-6)
- 实验总结已经在作业中体现,不用写。
201521123112《Java程序设计》第7周学习总结的更多相关文章
- 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 ...
随机推荐
- Java框架概述
一.框架的意义 1.什么是框架? 框架就是一些类和接口的集合,通过这些类和接口协调来完成一系列的程序实现.有了框架,我们就可以集中精力进行业务逻辑的开发而不用去关心它的技术实现以及一些辅助的业务逻辑. ...
- MVC5+EF6 完整教程17--升级到EFCore2.0
EF Core 2.0上周已经发布了,我们也升级到core 文章内容基于vs2017,请大家先安装好vs2017(15.3). 本篇文章主要讲下差异点,跟之前一样的就不再重复了. 文章目录(差异点): ...
- 0711HTML初体验
今天是正式上课的第一天.这边先记下初学的时候容易忘记的问题.在图片上链接汉子显示是<title="想在图片显示的内容">. 合并单元格,合并行<td colspa ...
- Go指针
Go 语言指针 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务. 接下来让我们来一步步学习 Go 语言指针. 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地 ...
- 第4天:JS入门-给div设置宽高背景色
今天学习了js入门课程,听的不多,做了个小练习,给div设置宽高.背景色.一点点都是进步.核心代码如下: <!DOCTYPE html><html lang="en&quo ...
- Django编写RESTful API(二):请求和响应
欢迎访问我的个人网站:www.comingnext.cn 前言 在上一篇文章,已经实现了访问指定URL就返回了指定的数据,这也体现了RESTful API的一个理念,每一个URL代表着一个资源.当然我 ...
- eclipse中使用Maven管理java工程设置jdk版本为jdk1.8
使用Maven管理Java工程时,maven可以自动下载工程中依赖的jar包,这对于大型的项目非常方便.但在初次使用eclipse新建maven工程时遇到一些问题,我的jdk安装的是1.8版本,在配置 ...
- 【可视化】Echarts3坐标系倒映
目标: 用echarts实现在一个echarts图表中包含上下两个坐标系 横轴合并在一块.有一种上下对称水映的视觉效果 要点提示:grid 是一个数组 包含两个grid xAxis,yAxis也都是数 ...
- Apache Storm 1.1.0 中文文档 | ApacheCN
前言 Apache Storm 是一个免费的,开源的,分布式的实时计算系统. 官方文档: http://storm.apache.org 中文文档: http://storm.apachecn.org ...
- SpringMVC的REST风格的四种请求方式
一. 在HTTP 协议里面,四个表示操作方式的动词:GET.POST.PUT.DELETE. ·它们分别对应四种基本操作: 1.GET ====== 获 取资源 2.POST ======新建资源 ...