201521123067 《Java程序设计》第7周学习总结


1. 本周学习总结

以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。




2. 书面作业


Q1.ArrayList代码分析

1.1 解释ArrayList的contains源代码

以下是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是一个用来判断某个ArrayList中是否包含某个对象或者元素,其中indexOf是用来查找该对象或者元素所在位置的方法,如果该对象或者元素存在,则indexOf方法返回其位置,如果不存在,则返回-1,contains方法再根据indexOf方法的返回值来确定是否含有该对象或者元素,如果indexOf方法的返回值>=0,则contains方法返回true,如果indexOf方法的返回值<0,则contains方法返回false。

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

  public E remove(int index) {
RangeCheck(index);
modCount++;
E oldValue = (E) elementData[index];
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,numMoved);
elementData[--size] = null; // Let gc do its work
return oldValue;
}
答:首先根据指定的位置找到要删除的元素,然后将该元素移除,向左移动所有后续元素,再将长度减1。

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

答:ArrayList存储数据时不需要考虑元素的类型。

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

以下是add的源代码:

 public void add(int index, E element) {
if (index > size || index < 0)
throw new IndexOutOfBoundsException(
"Index: "+index+", Size: "+size);
ensureCapacity(size+1); // Increments modCount!!
System.arraycopy(elementData, index, elementData, index + 1,
size - index);
elementData[index] = element;
size++;
}
答:add方法是先判断需要加入新元素的位置是否超过数组容量,如果超过,则先扩大数组容量,使其长度加1。

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

以下是private void rangeCheck(int index)的源代码:

private void rangeCheck(int index) {
if (index >= size) {
throw new RuntimeException("range out");
}
}
答:因为将rangeCheck用private修饰可以不被外界任意修改,并且具有隐私性,不被随意调用,如果用public来修饰,那么该方法就可以被外界看到,并且能被任意调用。

Q2.HashSet原理

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

答:当向HashSet(散列集)中增加新对象时,首先根据哈希函数计算要增加对象的hashCode码,根据该值来得到一个位置用元素来存放当前对象。如果在该位置上没有东西的话,那么HashSet认为该元素在集合中不存在,直接增加进去。如果在该位置已经有一个元素了,接着将准备增加到集合中的元素与该位置上的元素用equals方法进行比较。如果该equals方法返回false,那么说明HashSet中不存在该元素,再进行一次散列,将该元素放到散列后计算出来的地址中。如果equals方法返回true,那么说明HashSet中已经存在该元素了,不再将该元素增加到HashSet中。此过程需要调用的是equals方法和insert方法。

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

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

答:在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3是定义了Integer[]来存放输入的数据,然后再用ArrayIntegerStack类来对输入的数据进行需要的操作;而题集jmu-Java-05-集合之5-1 ArrayListIntegerStack中用list来存放输入的数据,并直接使用list中的操作就可以满足题目中的要求了。

3.2 简单描述接口的好处。

答:接口的好处:能使整个结构清晰,类之间的通信简单易懂,扩展性好,提高复用性,我个人感觉,面向接口编程能够使整个代码都很有条理,在修改的时候很方便,这是切身体会!!而且采用面向接口编程的话,其他人一看你的代码就能明白你在写什么,大概想实现哪些功能,一目了然,便于查看。

Q4.Stack and Queue

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

package huiwen;

import java.util.Scanner;

class StackString {
public int maxSize;
private char[] array;
private int top; public StackString(int maxSize) {
this.maxSize = maxSize;
array = new char[maxSize];
top = -1;
} public void push(char i) {
array[++top] = i;
} public char pop() {
return (array[top--]);
} public int peak() {
return (array[top]);
} public boolean isEmpty() {
return (top == -1);
} public boolean isFull() {
return (top == maxSize - 1);
}
} public class Main201521123067 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = scanner.next();
StackString stack = new StackString(s.length());
char[] c = s.toCharArray();
for (int i = 0; i < c.length; i++) {
stack.push(c[i]);
}
System.out.println();
boolean b = true;
for (int i = 0; i < stack.maxSize; i++) {
if (c[i] != stack.pop()) {
b = false;
break;
}
}
if (b)
System.out.println("该字符串是回文!");
else
System.out.println("该字符串不是回文!");
}
}
以下是运行结果的截图:



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

实验总结:
●5-6这道题我主要是运用了栈的形式来处理,首先设立A和B两个栈,然后将偶数放入B栈,将奇数放入A栈,接着将它们按规定顺序一一出栈并输出就可以了。不过在这题中的格式要求比较严格,需要仔细思考一下才能想出来怎么做。

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

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

5.1 实验总结

●在5-2这题中,主要是需要学会用TreeSet,用JDK文档可以搜索到TreeSet的详细信息,看完之后就会使用它了。在此题中需要使用到TreeSet中的add(E e)方法、pollFirst()方法、size()方法,用上这些,这道题很快就能做出来了。

Q7.面向对象设计大作业-改进

7.1 完善图形界面(说明与上次作业相比增加与修改了些什么)

7.2 使用集合类改进大作业

与上次相比,我增加了许多功能,例如菜单栏和菜单项,还有将搜索框中的文字输出,具体的见下图:
















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

3.1. 码云代码提交记录

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

201521123067 《Java程序设计》第7周学习总结的更多相关文章

  1. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  2. 20145213《Java程序设计》第二周学习总结

    20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...

  3. 20145213《Java程序设计》第一周学习总结

    20145213<Java程序设计>第一周学习总结 教材学习内容总结 期待了一个寒假,终于见识到了神秘的娄老师和他的Java课.虽说算不上金风玉露一相逢,没有胜却人间无数也是情理之中,但娄 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145330孙文馨 《Java程序设计》第一周学习总结

    20145330孙文馨 <Java程序设计>第一周学习总结 教材学习内容总结 刚开始拿到这么厚一本书说没有压力是不可能的,开始从头看觉得很陌生进入不了状态,就稍微会有一点焦虑的感觉.于是就 ...

  6. 20145337 《Java程序设计》第九周学习总结

    20145337 <Java程序设计>第九周学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC可以 ...

  7. 20145337 《Java程序设计》第二周学习总结

    20145337 <Java程序设计>第二周学习总结 教材学习内容总结 Java可分基本类型与类类型: 基本类型分整数(short.int.long).字节(byte).浮点数(float ...

  8. 20145218《Java程序设计》第一周学习总结

    20145218 <Java程序设计>第一周学习总结 教材学习内容总结 今天下午看了Java学习的视频,感觉很是新奇,之前觉得Java学起来是艰难枯燥的,但通过第一章的学习觉得如果自己可以 ...

  9. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  10. 《Java程序设计》第二周学习总结

    20145224陈颢文<Java程序设计>第二周学习总结 教材学习内容总结 一.类型.变量与运算符 1.类型 整数: 可细分为为short整数(占2字节),int整数(占4字节),long ...

随机推荐

  1. SpringBoot启动流程解析

    写在前面: 由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图ke ...

  2. vi替换方法总结

    1. 基本的替换 :s/vivian/sky/ 替换当前行第一个 vivian 为 sky :s/vivian/sky/g 替换当前行所有 vivian 为 sky :n,$s/vivian/sky/ ...

  3. html5/css3布局(一)

    响应式布局 1.响应式布局介绍 响应式布局可以为不同终端的用户提供更加舒适的界面和更好的用户体验,就是一个网页可以在不同设备上显示,比如:电脑.平板.手机等,不同设备都可以兼容显示.这样就不必为每一种 ...

  4. mysql 5.7.19 安装

    下载 官方下载地址,要注意的是要下载的是 MySQL Community Server.根据系统选择相应压缩包,这个是 win 下安装.选择 Zip Archive 安装 将下载好的压缩包解压到想要安 ...

  5. 使用Jetty运行Java Web项目(Maven)

    目前流行的两款IDE: Eclipse和IntelliJ IDEA 2. IntelliJ IDEA

  6. ARC和MRC 兼容的单例模式

    一.ARC下的单例实现 说明:在用户实例化的方法控制单次执行,同时开放单例的初始化方法. -(instancetype)init{ self=[super init]; if(self){ stati ...

  7. 配置Tomcat

    目前有很多网站使用jsp的程序编写,所以解析jsp的程序就必须要有相关的软件来完成.Tomcat就是用来解析jsp程序的一个软件. 安装tomcat Tomcat的安装分为两个步骤:安装JDK和安装T ...

  8. asp.net core MVC 全局过滤器之ExceptionFilter异常过滤器(一)

    本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter异常过滤器(一) asp.net cor ...

  9. 【HotSpot】 jps

    jps(1) General Commands Manual jps(1) Name jps - Java Virtual Machine Process Status Tool SYNOPSIS j ...

  10. Win7系统默认的壁纸路径

    Win7系统默认的壁纸路径.. ------------------- ------------------- ------------------- ------------------- ---- ...