1. 本周学习总结

(图片来自网络)

可以看到,java的容器很多,这里讲一下这周经常用到的

ArrayList:用数组形式保存数据的容器,随机访问比较快,但是插入删除操作都比较耗时,会自动调整内部数组大小来避免容量不够

LinkedList:与ArrayList的作用差不多,不同之处类似于数组与链表的关系,即插入和删除比较快但是随机访问没有前者快,另外这个容器由于支持对容器前/尾操作,所以它可以作为栈和队列使用

HashSet: 一种自动将内部元素按照哈希表形式保存的容器,访问速度很快

TreeSet:功能同上,也是一种set,不过内部会用红黑树的数据结构排序

TreeMap:很好用的字典容器,TreeSet的实际实现方式

还有Collections 和Arrays类中有许多工具作用的静态方法

如我们常用的Arrays.toString(),Collections.sort()等等

2. 书面作业

1. ArrayList代码分析

1.1 解释ArrayList的contains源代码



contains方法中调用indexOf方法然后,遍历内部用于保存数据的elementData数组,如果匹配返回数组中的下标

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

进行越界检查,用一个变量保存该位置的旧数据,判断删除位置是不是末尾,如不是末尾,

将数组整体前移,将最后一位置为null ,返回前面那个变量

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

不需要,它使用Object数组来保存数据,所有数据类型都是它的子类,返回数据的时候它会通过强制转型为类实例化时指定的类型

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

会调用ensureCapacityInternal方法,如果需要把空间调整大的话,就使用grow该方法将elementData数组变大

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

因为这个方法是内部使用的,使用者在使用ArrayList的各种方法时不需要考虑时刻检查是否越界的问题,这个问题已经在方法内部解决了,例如add之类的方法会确保容量足够,而remove(by index)之类的方法则在内部进行rangeCheck检查,如果越界会抛出异常,所以这个方法并没有需要在外部显式调用的需求,故声明为private

2.HashSet原理

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

HashSet内部使用一个HashMap保存数据,通过映射键->"PRESENT"的一个无用的值上来复用HashMap的方法,add方法中使用Map.put方法来将元素加入内部的map中,put方法使用hash方法来确定元素保存位置

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

同上 ,继承自Object的hashCode方法是在hash方法中使用的

3. ArrayListIntegerStack

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

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

实现的是同一个接口,所以方法作用都基本相同,不同的是二者保存数据的方式不用及因此改变数据的方法的内部实现也不用

ArrayIntegerStack主要是利用loc指针对内部数据数组的值进行修改,而ArrayListIntegerStack则直接复用了内部的一个ArrayList的各种方法

3.2 简单描述接口的好处

可以使内部实现细节与该类实现后的用法独立,无论内部数据保存方式、方法如何,在外部使用该类都是一样的,比如这道题在pta上做的时候main方法中代码基本都不用做改动

4.Stack and Queue

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

  /**
* @author 201521123077
*/
public class PalindromicStr {
public static boolean isPalindromic(String str)
{
MyArrayStack<Character> stack=new MyArrayStack<>();
int index=0;
for(;index<str.length()/2;index++)
{
stack.push(str.charAt(index));
}
if(str.length()%2==1)
index++;
for(;index<str.length();index++)
{
if(str.charAt(index)!=stack.pop())
{
return false;
}
}
return true;
}
}
MyArrayStack是自己写的内部为LinkedList的栈

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

	int count=0;
for(int i=0;i<amount;i++)
{
if(!queueA.isEmpty())
{
if(count==amount-1)
System.out.print(queueA.poll());
else
System.out.print(queueA.poll()+" ");
count++;
}
if(!queueA.isEmpty())
{
if(count==amount-1)
System.out.print(queueA.poll());
else
System.out.print(queueA.poll()+" ");
count++;
}
if(!queueB.isEmpty())
{
if(count==amount-1)
System.out.print(queueB.poll());
else
System.out.print(queueB.poll()+" ");
count++;
}
}

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

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

5.1 实验总结

TreeSet会在内部帮我们排序好,默认是按照键的自然顺序排序

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

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

List<Map.Entry<String,Integer>> list=new ArrayList<Map.Entry<String,Integer>>(map.entrySet()) ;

Collections.sort(list,new Comparator<Map.Entry<String,Integer>>() {

			@Override
public int compare(Entry<String, Integer> o1,
Entry<String, Integer> o2) {
if(o1.getValue().equals(o2.getValue()))
{
return o1.getKey().compareTo(o2.getKey());
}
return o2.getValue().compareTo(o1.getValue());
}
});

同上一题,不过需要我们利用转换为list然后手动按照map的值排序

6.1 伪代码

while(has next input)
if(next num doesn's inside map)
put num into map
else
get the value in map to add 1
sort the map
output the result

6.2 实验总结

TreeMap不支持按照值来维护内部数据排列顺序,需要它按照值来排列需要我们手动排序

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

打开软件:



点击登录:



输入用户密码:



点击显示购物车:



注销 重复登录过程 这次登陆agt账户 :



购物车排序:

注销 并尝试暴力破解某用户密码 :



等待设定的freezeTime(aka 60seconds here)重新显示登陆框:

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

实现了一下登陆注册显示购物车安全控制等等功能

7.2 使用集合类改进大作业

项目原本就是基于集合类的, 不喜欢JTable所以不修改为JTable版本,采用原来的TextArea模式

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

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

201521123077 《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. 鄙人对constructor和prototype的总结

    在学习js面向对象过程中,我们总是对constructor和prototype充满疑惑,这两个概念是相当重要的,深入理解这两个概念对理解js的一些核心概念非常的重要.因此,在这里记录下鄙人见解,希望可 ...

  2. 一步一步学多线程-ThreadLocal源码解析

    上网查看了很多篇ThreadLocal的原理的博客,上来都是文字一大堆,费劲看了半天,大脑中也没有一个模型,想着要是能够有一张图明确表示出来ThreadLocal的设计该多好,所以就自己看了源码,画了 ...

  3. mysql explain和profiling

    语法:explain  select .... 变体: 1.explain extended select .... 将执行计划“反编译”成select语句: 运行show warnings 可以得到 ...

  4. python第一篇-------python介绍

    一.python介绍 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,Guido开始写Python语言的编译器.Python这个名字,来自Guido所 ...

  5. ubuntu下动态链接库小计

    只记录下具体操作代码,以后再做补充 1,gcc -Wall -fPIC -c test4.c 2,gcc -g -shared -Wl,-soname,libtests.so -o libtests. ...

  6. vue开发环境搭建及热更新

    写这篇博客的目的是让广大的学者在初入Vue项目的时候少走些弯路,虽然现在有很多博客也有差不多的内容,但是博主在里面添加了一些学习时碰到的小问题.在阅读这篇博客之前,我先给大家推荐一篇文章<入门W ...

  7. JavaScript模块化 --- Commonjs、AMD、CMD、es6 modules

    随着前端js代码复杂度的提高,JavaScript模块化这个概念便被提出来,前端社区也不断地实现前端模块化,直到es6对其进行了规范,下面就介绍JavaScript模块化. 这篇文章还是希望能给大家一 ...

  8. iOS项目之wifi局域网传输文件到iPhone的简单实现

    如今手机发展非常迅速,app的种类也琳琅满目,而自从有了4G网之后,手机流量也越来越不够用了.所以现在越来越多的app有了本地文件的管理功能,方便用户随意浏览手机文件的同时,也为用户节约了流量的使用. ...

  9. Zepto源码分析(一)核心代码分析

    本文只分析核心的部分代码,并且在这部分代码有删减,但是不影响代码的正常运行. 目录 * 用闭包封装Zepto * 开始处理细节 * 正式处理数据(获取选择器选择的DOM) * 正式处理数据(添加DOM ...

  10. Ta-lib函数功能列表

    import tkinter as tk from tkinter import ttk import matplotlib.pyplot as plt import numpy as np impo ...