1. 本周学习总结

2. 书面作业

1.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来修饰,那么该方法就可以被外界看到,并且能被任意调用

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

3.ArrayListIntegerStack
题集jmu-Java-05-集合之5-1 ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)                                                                                            答:不同之处在于前者使用了ArrayList的动态数组,不需要判断是否栈满,直接使用ArrayList内部的方法,后者是已经定义了数组的长度,纯粹就是对数组的操作。
3.2 简单描述接口的好处.                                                                                                                                                                                                                                                                                                    答:对本题来说,两个ArrayIntegerStack方法同名,却是对IntegerStack接口进行不同的实现。所以可以看出接口的好处之一是对要完成功能相似而具体实现方法不同的情况来说,可以用相同的方法名,不同的实现,来根据需求通过不同的方式来实现。

4.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 Main201521123086 {
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("该字符串不是回文!");
}
}

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

while (input.hasNextLine()) {
String str = input.next();
if (str.equals("!!!!!")){
break;}
else if (!str.contains(str))
str.add(str);
}
5.1 实验总结:这题关键就是使用了Set的自然排序实现类TreeSet,此类可以对添加的对象进行默认排序。

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

题目集:jmu-Java-05-集合

3.1. 码云代码提交记录

3.2. PTA实验

 

201521123105 第七周Java学习总结的更多相关文章

  1. 20165203《Java程序设计》第七周Java学习总结

    20165203<Java程序设计>第七周Java学习总结 教材学习内容总结 第11章 JDBC与MySQL数据库 MySQL数据库管理系统 MySQL数据库管理系统,简称MySQL,是世 ...

  2. 第七周java学习总结

    学号 20175206 <Java程序设计>第七周学习总结 教材学习内容总结 第八章: 主要内容 String类 StringTokenizer类 Scanner类 StringBuffe ...

  3. 20165223《Java程序设计》第七周Java学习总结

    教材学习内容总结 第11章-JDBC与MySQL数据库 要点 MySQL数据库管理系统 连接MySQL数据库 查询操作(基础) 更新.添加.删除(基础) 预处理语句(重点) 通用查询(难点) 事务 笔 ...

  4. 20145307第七周JAVA学习报告

    20145307<Java程序设计>第七周学习总结 教材学习内容总结 Lambda Lambda语法概述: Arrays的sort()方法可以用来排序,在使用sort()时,需要操作jav ...

  5. 2019年8月12日~8月18日 第七周JAVA学习总结

    本周主要完成了PTA代码编写的任务,将报告也完成了,但是由于同学聚会比较多所以JAVA的学习比较少,也没有学习统一建模语言.用在编程的时间平均每天5个小时,用在JAVA学习上平均每天1个小时,用在解决 ...

  6. 201521123105 第8周Java学习总结

    1.本周学习总结 1.1思维导图 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4-1) 1.1 实验总结 1.删除元素的时候从最后一个元素开始,避免删除元素后位置发生变化而导致 ...

  7. 201521123105 第三周Java学习总结

    1. 本周学习总结 对象(实际个体) 对象与类 类(模板) 2.书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private ...

  8. 201521123105 第11周Java学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 本次PTA作业题集多线程 1. 互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) ...

  9. 201521123105 第10周Java学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-21.1 截图你的提交结果(出现 ...

随机推荐

  1. [机器学习] Apriori算法

    适用场合 Apriori算法包含两部分内容:1,发现频繁项集 2,挖掘关联规则. 通俗地解释一下,就是这个意思:1.发现哪些项目常常同时出现 2.挖掘这些常常出现的项目是否存在“如果A那么B”的关系. ...

  2. 【有意思的BUG】后端多处数据校验 前端数据校验

    软件(尚处在开发阶段的软件)会犯许多低级的错误,这些错误以你在生活中的经验而言简直莫名其妙.往往你认为这个小功能怎么可能有BUG呢,是的,你猜对了!! 拿1个简单的结构举例:后端页面[1]+后端页面[ ...

  3. SQL连接、合并、子查询

    连接:连接分为内连接.外连接.交叉连接 内连接和外连接都是在笛卡尔积的基础做一些修改. 合并查询:把两个相似的结果可以用union联合起来. mysql> select id,time from ...

  4. javascript中的时间版运动

    前面的话 速度版JS运动是指以速度为参照,随着路程的变化,时间随之变化:而时间版JS运动是指以时间为参照,随着路程的变化,速度随着变化.相较而言,时间版JS运动更为常用.JQ的animate就是时间版 ...

  5. 谈谈出入React框架踩过的坑

    1 在JSX的元素中写入内联样式,例如<div style={"color:blue"}></div> 报错:warning:Style prop valu ...

  6. cvpr2017:RSVP

    1.简单介绍 这个框架主要应用场景是更智能的视频监控.主要贡献是利用long term和short term的时序信息来预测当前帧.框架分割的主要对象是人,将图像中的人物分割成头发.脸.大衣.裤子.包 ...

  7. 关于curl / curl_multi的一些实验

    几天没写了,主要都是自己的学习过程,贴一下curl / curl_multi_exec的一些代码,mark一下. <?php /** * Created by PhpStorm. * User: ...

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

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

  9. 2017-04-21周Java学习笔记

    2017-04-21-周Java学习笔记... -------------------------------------- 计算机起源于:战争中的炮弹轨道计算.Unix操作系统是使用C语言编写的操作 ...

  10. Cell

    首先需要创建一个model类,继承于NSObject: 定义两个属性: @property(nonatomic,retain)NSString imageName; @property(nonatom ...