201621123026《JAVA程序设计》第八周学习总结

作业08-集合

1. 本周学习总结

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

2. 书面作业

1. ArrayList代码分析

1.1 解释ArrayList的contains源代码

由图,contains调用了equals()方法,是用于往ArrayList里存入不重复的元素。

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

由图,index是定位一个元素的位置,然后将该元素删掉,让整个ArrayList的大小减一并向索引的位置位移1。

1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的具体类型吗?
不需要。ArrayList存储数据是以object作为父类的数组,且ArrayList只能存储引用类型。

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

由图,在没有越界的情况下,当发现数组容量不够时,会将数组容量扩增1,然后再存入元素。

1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?
rangeCheck是ArrayList用于检测存储数据是否越界的方法,只供应内部使用,不必让其他类了解其内含的构造,所以声明为private。

2. HashSet原理

2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
将元素加入散列集时,是用hasCode方法将元素翻译成散列码后存入对应的位置,想要确定存储位置可以使用hasCode

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,有什么不同?(不要出现大段代码)
内部的实现不同。在面向对象2中需要自己定义变量来获得存入数组的长度等参数,而之后再使用了Collection接口后,就有许多类似的方法可以直接获得数组长度等,更为便捷。

3.2 结合该题简单描述接口的好处,需以3.1为例详细说明,不可泛泛而谈。
在本次PTA作业中,调用接口实现首先使得代码可读性增加,因为接口的构造函数让类的实现功能一目了然。

4. Stack and Queue

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

   package week9;

import java.util.*;

interface Stack1{
	public void push(Character item);
	public void pop();
	public Character peek();
	public boolean empty();
	public int size();
	
}

class Judge implements Stack1{

	List<Character> list = new ArrayList<Character>();
	
	@Override
	public void push(Character item) {
		
		list.add(item);
	}

	@Override
	public void pop() {
		
		list.remove(list.size()-1);
	}

	@Override
	public Character peek() {
		
		return list.get(list.size()-1);
	}

	@Override
	public boolean empty() {
		
		return list.isEmpty();
	}

	@Override
	public int size() {
		
		return list.size();
	}

	
}


public class Main201621123026 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		Judge judge = new Judge();
		String s = sc.next();
		char[] c = s.toCharArray();
		for(int i=0;i<c.length;i++){
			judge.push(c[i]);
		}
		for(int i = 0;i<judge.size();i++){
			if(c[i] != judge.peek()) {
				System.out.println(false);
				break;
				}
			judge.pop();			
		}

		
		System.out.println(true);
		sc.close();
	}
	 
	
}

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

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

题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (作业中不要出现大段代码)
这里利用Map中key与value一一对应的关系,在同样key值的put方法中,后输入的value值会把之前的value给覆盖掉。

排序时使用Collection.sort

5.1 实验总结

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

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

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

7.1 使用集合类改进大作业或者简述你的面向对象设计大作业中,哪里使用到了集合类。
7.2 进一步完善图形界面(仅需出现改进的后的图形界面截图)
参考资料:

JTable参考项目

3.码云及PTA

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

3.1. 码云代码提交记录

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

3.2 截图PTA题集完成情况图

需要有两张图(1. 排名图。2.PTA提交列表图)

3.3 统计本周完成的代码量

周次 总代码量 新增代码量
1 98 98
2 338 240
3 535 197
4 705 170
5 818 113
6 1073 255
7 1274 201
8 1451 177

需要将每周的代码统计情况融合到一张表中。

选做:4. 使用Java解决实际问题

尝试为代码统计项目 增加图形界面。
3.1 设计图形界面(可用纸画)。
3.2 从该git项目fork一个分支,在该分支上进行你的开发,以后如果开发的好,可以尝试向开发者提出pull request。注意:规划好包名。

posted @ 2017-11-11 11:37  数构易中天  阅读(182)  评论(1编辑  收藏  举报