第八次作业

1. 本周学习总结

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

2. 书面作业

1. ArrayList代码分析

1.1 解释ArrayList的contains源代码

首先调用了indexOf方法。而indexOf方法则是判断传入的参数是否为空,若为空,则遍历整个列表,直到遇到某个为空的元素,返回其下标;若不为空,则遍历整个列表,直到遇到某个值与参数相等的元素,返回其下标。若遍历完后还未找到与参数值相等的元素,则返回-1。contains方法通过判断调用indexOf方法返回的值是否大于等于0来判断列表中是否存在该元素。

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



首先调用rangeCheck()方法判断数组是否越界,然后再把被移除的元素后面的元素往前移动一位,最后修改数组大小。

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

不需要,通过以上两题的源代码可以发现传入参数都为Object类型,object是java类中的基类,所有类都继承object,所以设置形参为object时,其他所有类型都可以传入。

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



实际上Arraylist是有初始容量的,且初始容量为10,所以首先调用ensureCapacityInternal()方法判断是否需要对数组进行扩容,若需要则调用ensureExplicitCapacity()实现扩容。

首先判断指定位置是否越界,不越界的话再类似add(E e)进行扩容判断、添加元素。

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

因为该方法只是用来判断数组是否越界,用户只需要知道结果不需要知道方法的实现过程。

2. HashSet原理

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

首先调用hashCode()计算出待存储对象的散列码(HashCode),作为存储的位置的依据,若发生冲突,则调用equals()方法与已有元素进行比较,若比较结果为假,就将该元素通过解决冲突的方法放入对应的位置中,若比较结果为真,就用新值替换旧值。

2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)

时间复杂度为O(1),因为HashSet是通过哈希算法来实现的,该过程不需要遍历,是直接计算位置来添加元素。

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

3. ArrayListIntegerStack

题集jmu-Java-05-集合之ArrayListIntegerStack

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

本次的ArrayListIntegerStack是用动态数组写的,而上次的ArrayIntegerStack是用数组实现的。

存储形式的不同导致了后面操作方法的不同。

动态数组获取栈顶元素,可以通过size()方法来获取栈顶位置,而数组则需要自定义栈顶指针,通过指针的移动来获取栈顶位置。

3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。

我们之前已经编写过接口及实现该接口的ArrayIntegerStack,现在我们要新定义一个类ArrayListIntegerStack,只需要实现这个接口,然后自动添加接口里的方法,再把这些方法填充实现即可。方便灵活,不用再一个一个编写方法,同时可以根据不同的工作环境来使用不同的方式来实现接口里的方法。

4. Stack and Queue

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

import java.util.LinkedList;
import java.util.Scanner; public class Main201621123033{
public static void main(String[] args){
LinkedList<Character> stack=new LinkedList<Character>();
Scanner sr=new Scanner(System.in);
String str=sr.next();
char[] ch=str.toCharArray();
boolean flag = true;
for(int i=0;i<str.length();i++){
stack.add(ch[i]);
}
for(int i=0;i<str.length();i++){
if(stack.pollLast().equals(ch[i])){
flag=true;
}
else{
flag=false;
break;
}
}
if(flag==true)
System.out.println("这是回文");
else
System.out.println("这不是回文");
} }

4.2 题集jmu-Java-05-集合之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue接口,并说明你使用了Queue接口的哪一个实现类?

        Queue<Integer> q1=new LinkedList();
Queue<Integer> q2=new LinkedList();

使用了Queue接口的LinkedList实现类。

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

题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出

5.1 实验总结

该题使用了TreeSet来存储数据,TreeSet具有排序功能且不会添加重复的数据。

首先使用next()方法来获取单词并调用add()方法将其添加到Set中,然后打印出单词数量。接下来定义一个计数用的变量count,遍历Set中的元素,并打印出来,每打印一次count就+1,直到count大于等于10则跳出循环。

6. 选做:统计文字中的单词数量并按出现次数排序

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

6.1 伪代码

创建HashMap对象map

开始循环

IF 读入单词为"!!!!!"

退出循环

ELSE IF map中没有对应key

添加单词到map中并设置value为1

ELSE

将key对应的value值加1

创建ArrayList对象list

实现Collections接口对map对象进行排序

输出map的长度

输出排序后list中前十个数据

6.2 实验总结

一开始是先创建了一个String[]类型的对象来存储这些输入的单词,然后想一个个遍历再放进map中,结果发现放入map的过程中会出现空指针错误,最后参照7-2的方式,输入一个单词就放进map中。后面排序使用ArrayList实现Colletions接口来实现。

3.码云及PTA

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

3.1. 码云代码提交记录

3.2 截图PTA题集完成情况图

3.3 统计本周完成的代码量

周次 总代码量 新增代码量 总文件数 新增文件数
3 547 547 12 12
5 971 424 20 8
6 1577 606 29 9
7 2187 1216 41 21
8 2793 606 49 8
9 3040 247 56 7

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

  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. 第32章 TIM—高级定时器—零死角玩转STM32-F429系列

    第32章     TIM—高级定时器 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fire ...

  2. System.Threading.Tasks

    前言: 我们之前介绍了两种构建多线程软件的编程技术(使用异步委托或通过System.Threading的成员).这两个可以在任何版本的.NET平台工作. 关于System.Threading 的介绍 ...

  3. 使用Mac的过程中的一些小操作

    前言:使用Mac的过程中的一些小操作 查看Mac系统是32位还是64位: 方法1: 点击左上角的苹果按钮->关于本机->概览->系统报告->软件->偏好设置面板:右侧有提 ...

  4. 【赛时总结】◇赛时·VII◇ Atcoder ABC-106

    [赛时·VII] ABC-106 一条比赛时莫名其妙发了半个小时呆的菜鸡&咸鱼得到了自己应有的下场……279th. Rating:1103(+) 终于AK,一次通过…… ◇ 简单总结 ABC还 ...

  5. poj_1320_Street Numbers

    A computer programmer lives in a street with houses numbered consecutively (from 1) down one side of ...

  6. MySQL为何不建议使用null列

      Preface       Null is a special constraint of columns.The columns in table will be added null cons ...

  7. 内置函数系列之 map

    map(映射函数)语法: map(函数,可迭代对象) 可以对可迭代对象中的每一个元素,分别执行函数里的操作 # 1.计算每个元素的平方 lst = [1,2,3,4,5] lst_new = map( ...

  8. js开发中常用小技巧

    1.获取指定范围内的随机数 function getRadomNum(min,max){ return Math.floor(Math.random() * (max - min + 1)) + mi ...

  9. php结合redis实现高并发下的抢购、秒杀功能【转】

    抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存 ...

  10. Linux相关常用命令

    1.XShell中上传文件命令 首先需要安装rz文件上传工具: yum -y install lrzsz 然后执行以下命令,可打开本地系统的选择文件窗口:(或者直接把本地的文件拖动到SSH Shell ...