201621123005《java程序设计》第八次实验总结
201621123005《Java程序设计》第八次实验总结
- 本周学习总结
以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。

- 书面作业
- ArrayList代码分析
1.1 解释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;
}
当元素不为null时,调用equals()方法来确定元素是否存在,当存在是返回true,否则返回false
1.2 解释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;
return oldValue;
}
先判断数组是否越界,当不越界时,将对应的元素取出来,然后把后面所有的元素往前,最后返回被删除的元素。原来最后一个元素位置为null
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的具体类型吗?
不需要,因为是用Object数组实现,而Object类又是所有类的父亲,所以不需要考虑。
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
public boolean add(E e) {
ensureCapacityInternal(size + 1);//判断空间是否足够,不够就扩充
elementData[size++] = e;//容量增一,在尾部增加
return true;
}
private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA)
{
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity); }
ensureExplicitCapacity(minCapacity);
}
当elementData是默认的长度的空数组的时,就确保数组容量是传入参数和默认长度的最大值。
private void ensureExplicitCapacity(int minCapacity) {
modCount++;
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
modCount先自增,当数组容量不够时,调用grow()方法。
private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity - minCapacity < 0)//判断容量够不够
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
// minCapacity is usually close to size, so this is a win:
elementData = Arrays.copyOf(elementData, newCapacity);
}
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
所以当数组容量不够时,数组容量会对数组进行自动扩容并把原数组的值拷贝到这个数组中。
1.5 分析private void rangeCheck(int indeyo'ox)源代码,为什么该方法应该声明为private而不声明为public?
因为类的用户是不需要知道remove()的时候具体发生了什么,只需要知道是否正确删除就可以了。
2、HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
首先计算哈希码的值即调用hashCode方法,然后根据哈希码查找对应存储位置,如果指定位置已有其他元素,则调用equals方法与已有元素进行比较,如果比较结果为假,则将元素插入,如果为真,则用新的值替换旧的值。
2.2 将元素加入HashSet中的时间复杂度是多少?是O(n)吗?(n为HashSet中已有元素个数)
时间复杂度是o(1),因为添加的时候是通过哈希算法来确定元素的添加位置,判断次数是常量。
3、 ArrayListIntegerStack
题集jmu-Java-05-集合之ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)
存储方式不同,上次运用数组存储,这次用动态数组,相比动态数组简简洁很多,比如动态数组在获取栈顶元素或出栈都可以直接运用size()来获得栈顶位置,然后进行操作,而数组则需定义一个top指针。
3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。
先定义一个接口,在接口内存放接口的名称,然后在类里面根据所需要的功能去重写这些方法,如果想要修改时就直接在类里面修改,想要增加时就只需要在接口中添加想要的,然后在类里面去编写这个方法,所以就是很方便而且灵活。
4、 Stack and Queue
4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈(请利用Java集合中已有的类),但不能使用java的Stack类(具体原因自己搜索)与数组。请粘贴你的代码,类名为Main你的学号。
package week9;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
interface IntegerStack{
public Integer push(Integer item);
public Integer pop();
}
class ArrayInterStack implements IntegerStack{
private List<Integer> list;
public ArrayInterStack (){
list=new ArrayList<Integer>();
}
@Override
public Integer push(Integer item) {
// TODO Auto-generated method stub
if (item == null)
return null;
list.add(item);
return item;
}
@Override
public Integer pop() {
// TODO Auto-generated method stub
if (list.isEmpty())
return null;
return list.remove(list.size() - 1);
}
@Override
public String toString() {
return list.toString();
}
}
public class Main201621123005{
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayInterStack arr=new ArrayInterStack();
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
char ch[]=str.toCharArray();
for (int i = 0; i < str.length(); i++) {
arr.push((int) ch[i]);
}
for (int i = 0; i < ch.length; i++) {
if(ch[i]==arr.pop())
{
System.out.println("huiwen");
break;
}
else
{
System.out.println("buhuiwen");
break;
}
}
}
}


4.2 题集jmu-Java-05-集合之银行业务队列简单模拟(只粘贴关键代码)。请务必使用Queue接口,并说明你使用了Queue接口的哪一个实现类?
把A,B窗口存放的人放在两个队列
Queue<Integer> dequeA=new ArrayDeque<>();
Queue<Integer> dequeB=new ArrayDeque<>();
根据奇偶入队
if(m%2==0){
{ dequeB.add(m);
}
else
dequeA.add(m);
}
}
输出操作
while(dequeA.size()!=0||dequeB.size()!=0){
if(dequeA.size()>=2&&dequeB.size()>=1)
{
//
}
else if(dequeA.size()<2&&dequeB.size()>=1){
//
}
else if(dequeA.size()>=2&&dequeB.size()<1)
{
//
}
else
System.out.print(dequeA.remove());
}
5、 统计文字中的单词数量并按单词的字母顺序排序后输出
5.1 实验总结
用Set集时可以避免重复元素进入,而且TreeSet使字符排序。
for (String e : words) {
if(i<10)
{ i++;
System.out.println(e);
}
else break;
}
用如上来输出排名前十的字符。
6、 选做:统计文字中的单词数量并按出现次数排序
6.1 伪代码
创建HashMap对象map;
读入字符串;
当遇到!!!!!时退出;
当map中不存在word时times=1;
当map中存在word时times+1;
创建ArrayList对象list;
用Collections.sort()排序;
输出map长度;
输出前十个数据;
6.2 实验总结
List<Map.Entry<String,Integer>> list=new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){
public int compare(Map.Entry<String,Integer>o1,Map.Entry<String,Integer>o2)
{
if(o1.getValue()==o2.getValue()){
return o1.getKey().compareTo(o2.getKey());
}
if( o1.getValue()>o2.getValue())
return -1;
else
return 1;
}
});
这道题是主要把Map中的键值对放进ArrayList,然后用Collections.sort()排序。
3.码云及PTA
题目集:jmu-Java-05-集合
3.1. 码云代码提交记录

3.2 截图PTA题集完成情况图


3.3 统计本周完成的代码量
| 周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
|---|---|---|---|---|
| 2 | 381 | 381 | 12 | 5 |
| 3 | 661 | 280 | 19 | 7 |
| 4 | 974 | 313 | 24 | 5 |
| 5 | 1358 | 384 | 33 | 9 |
| 6 | 2211 | 853 | 37 | 4 |
| 7 | 4623 | 412 | 42 | 5 |
201621123005《java程序设计》第八次实验总结的更多相关文章
- 201621123005《Java程序设计》第九次实验总结
201621123005<Java程序设计>第九周实验总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 ...
- 20145330《Java程序设计》第二次实验报告
20145330<Java程序设计>第二次实验报告 实验二 Java面向对象程序设计 实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承多态 3.初步掌握UM ...
- 20145320《Java程序设计》第二次实验报告
20145320<Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.12 15: ...
- 《Java程序设计》第二次实验报告
20145220 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测 ...
- 20145333 《Java程序设计》第二次实验报告
2014333 <Java程序设计>第二次实验报告 课程:Java程序设计 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 实验内容 初步掌握单元测试 ...
- 20144303 《Java程序设计》第二次实验实验报告
20144303 <Java程序设计>第二次实验实验报告 北京电子科技学院(besti)实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握U ...
- 20145240 《Java程序设计》第二次实验报告
20145240 <Java程序设计>第二次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.12 实验 ...
- 201621123005《Java程序设计》第十次实验总结
201621123005<Java程序设计>第十周学习总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 1. 常用异常 1.1 自己 ...
- Java程序设计第四次实验报告
北京电子科技学院(BESTI) 实 验 报 告 课程:java程序设计 班级:1352 姓名:何伟钦 学号:20135223 成绩: 指导教师:娄嘉鹏 ...
- 201771010123汪慧和《面向对象程序设计JAVA》第八周实验总结
一.理论部分 1.接口 用interface声明,是抽象方法和常量值定义的集 合.从本质上讲,接口是一种特殊的抽象类. 在Java程序设计语言中,接口不是类,而是对类 的一组需求描述,由常量和一组抽象 ...
随机推荐
- github push error ---- recursion detected in die handler
错误提示如下: 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 New Bitmap Image.bmp Coun ...
- Mirror--镜像相关错误
场景: 同一局域网下搭建了镜像的服务器上报以下错误日志: An error occurred in a Service Broker/Database Mirroring transport conn ...
- 2018 Multi-University Training Contest 1 Solution
A - Maximum Multiple 题意:给出一个n 找x, y, z 使得$n = x + y +z$ 并且 $n \equiv 0 \pmod x, n \equiv 0 \pmod y, ...
- 2017-2018 ACM-ICPC East Central North America Regional Contest (ECNA 2017) Solution
A:Abstract Art 题意:给出n个多边形,求n个多边形分别的面积和,以及面积并 思路:模板 #include <bits/stdc++.h> using namespace st ...
- 2017 Benelux Algorithm Programming Contest (BAPC 17) Solution
A - Amsterdam Distance 题意:极坐标系,给出两个点,求最短距离 思路:只有两种方式,取min 第一种,先走到0点,再走到终点 第二种,走到同一半径,再走过去 #include ...
- C# static的用法详解
C# static的用法详解 有的东西你天天在用,但未必就代表你真正了解它,正如我之前所了解的 static . 一.静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 n ...
- myeclipse安装jadclipse(反编译工具)
我是myeclipse5. 的IDE工具.为了能反编译class文件,上网搜索了很多资料,终于找到一下的一段资料: .将jad.exe 复制到myeclipse安装目录的jre/bin目录下, 如:C ...
- 微信小程序:页面配置 page.json
微信小程序:页面配置 page.json 一.页面配置 page.json 如果整个小程序的风格是蓝色调,那么可以在 app.json 里边声明顶部颜色是蓝色即可. 实际情况可能不是这样,可能你小程序 ...
- Ubuntu18.04 怎么开热点
先说明,电脑上要有wifi适配器,而且连接wifi时,不能开热点 我的笔记本是双系统,现在介绍一下我的设置 在设置里打开热点这个应该会吧,但是热点密码不是自己设置的,而是随机生成的,本文重点介绍一下怎 ...
- BZOJ3944: Sum(杜教筛模板)
BZOJ3944: Sum(杜教筛模板) 题面描述 传送门 题目分析 求\(\sum_{i=1}^{n}\mu(i)\)和\(\sum_{i=1}^{n}\varphi(i)\) 数据范围线性不可做. ...