201521123034《Java程序设计》第七周学习总结
1. 本周学习总结
以你喜欢的方式(思维导图或其他)归纳总结集合相关内容。

2. 书面作业
ArrayList代码分析
1.1 解释ArrayList的contains源代码


答:从ArrayList的contains源代码中可以看到,contains 方法返回的是indexOf(o) >= 0,而indexOf方法中先是判断传入的对象是否为空,如果为空,比较Arraylist数组中是否有空元素,如果有返回空元素的位置;如果对象不为空,则将该对象与Arraylist中的元素进行比较,如果有equals成功的,则返回该元素的位置;否则返回-1。因此当contains返回的数值大于0时,证明这个对象在Arraylist数组中已经存在了。
1.2 解释E remove(int index)源代码

答:首先rangeCheck(index)判断是否有越界(即超过Arraylist数组的长度); E oldValue = elementData(index)获取index位置开始到最后一个位置的个数, System.arraycopy(elementData, index+1, elementData, index, numMoved);将elementData数组index+1位置开始拷贝到elementData从index开始的空间; elementData[--size] = null; 使长度-1 ,设置elementData的原本的size位置为空。
1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的类型吗?
答:不需要。从1.1和1.2的源代码中可以看到其传入的对象是object,Object在Java中被定义为一个顶级父类,它是任何类父类,因此ArrayList存储数据时不需要考虑元素的类型。
1.4 分析add源代码,回答当内部数组容量不够时,怎么办?



答:当内部数组容量不够时,首先ensureCapacityInternal方法得到最小扩容量,其次ensureExplicitCapacity判断是否要扩容。
| 参考资料 |
>



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

答:用了private使rangeCheck这个方法只能在内部调用,从1.1的源代码可以看到其中remove这个方法就调用了rangecheck这个方法,rangecheck这个方法仅在内部被调用,若生命为public则外部也能调用,若是外部有人调用后改变了该方法的内容,那么整个程序就会错乱,因此用private保证了私有性。
HashSet原理
2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
答:计算出带存储的散列码作为存储的位置依据,将对象存入Hash类集合,需要用到hashCode和equals两个方法。
2.2 选做:尝试分析HashSet源代码后,重新解释1.1

答:从源代码中可以看到,hashset中的contain方法返回的是map.containsKey,map.containsKey判断传入的参数有没有对应的value值,有则返回true,没有则返回false。
ArrayListIntegerStack
题集jmu-Java-05-集合之5-1 ArrayListIntegerStack
3.1 比较自己写的ArrayListIntegerStack与自己在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3自定义接口ArrayIntegerStack,有什么不同?(不要出现大段代码)
| 05-5-1中的ArrayListIntegerStack |
```
private ArrayList list;
public ArrayListIntegerStack(){
list=new ArrayList();//使用了Arraylist
}
public Integer push(Integer item) {
// TODO Auto-generated method stub
if(item==null)
return null;
list.add(item);//用到了add方法
return item;
}
public Integer pop() {
// TODO Auto-generated method stub
if(list.size()==0)
return null;
return list.remove(list.size()-1);//用到remove方法
}
<table><tr><td bgcolor=frech grey>04-5-3中的ArrayListIntegerStack</td></tr></table>
private Integer[]arr;//使用数组
private int top=0;//top指针
public ArrayIntegerStack(int capacity) {
arr=new Integer[capacity];
}
public Integer pop(){
if(top==0)
return null;
top--;//出栈需要移动指针
return arr[top];
}
答:在5-1中编写的ArrayListIntegerStack使用的是ArrayList数组来存放对象,因此相应的push、pop、peek等方法的编写用到了list中的add、remove等方法;5-3中则是用数组来存放对象,并且要有top指针。
**3.2 简单描述接口的好处.**
答:接口有利于代码的复用,便于维护,在做大项目的时候有接口的话,可以并行开发,提高效率。
**Stack and Queue**
**4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈,但不能使用java的Stack类(具体原因自己搜索)。请粘贴你的代码,类名为Main你的学号。**
public class Main201521123034 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
String x=sc.next();
ArrayListStringStack list=new ArrayListStringStack();//创建两个栈,ArrayListStringStack使用的接口是实验5-1中的IntegerStack改成了StringStack
ArrayListStringStack list1=new ArrayListStringStack();
char [] arr = x.toCharArray();
for(int i=0;i<arr.length;i++){
list.push(String.valueOf(arr[i]));
}
int q=arr.length/2;
int k=arr.length%2;
//分两种情况,一种是字符串长度为奇数,另一种是字符串长度为偶数
if(k==0){
for(int y=1;y<=q;y++){
list1.push(list.pop());//将字符串的后一半入栈
}
for(int b=0;!list.empty()&&!list1.empty();b++){
if(!list.pop().equals(list1.pop())){//出栈比较字符是否相等
System.out.println("该字符串不是回文");
break;
}
if(list.empty()&&list1.empty()){
System.out.println("该字符串是回文");
}
}
}
else{
for(int p=1;p<=q;p++){
list1.push(list.pop());
}
list.pop();//如果长度为奇数,则list要先出栈一次
for(int b=0;!list.empty()&&!list1.empty();b++){
if(!(list.pop().equals(list1.pop()))){
System.out.println("该字符串不是回文");//同样是出栈比较是否相等
break;
}
if(list.empty()&&list1.empty()){
System.out.println("该字符串是回文");
break;
}
}
}
}
}
<table><tr><td bgcolor=frech grey>运行结果</td></tr></table>



**4.2 题集jmu-Java-05-集合之5-6 银行业务队列简单模拟。(不要出现大段代码)**
//创建三个队列,A窗口对应queue2,B窗口对应queue1
Queue<String> queue = new LinkedList<String>();
Queue<String> queue1 = new LinkedList<String>();
Queue<String> queue2 = new LinkedList<String>();
//当奇数的数字只有一个的情况
if(queue2.size()==1&&queue1.size()!=0){
System.out.print(queue2.remove()+" ");
for(;queue1.size()!=0;){
if(queue1.size()==1)
System.out.print(queue1.remove());
else
System.out.print(queue1.remove()+" ");
}
}
else {
//当奇数的数字个数大于1时的情况
for(int p=1;queue2.size()>0;p++){
if(queue2.size()==1&&queue1.size()==0)
System.out.print(queue2.remove());
else
System.out.print(queue2.remove()+" ");
if(p==2&&queue1.size()!=0){
System.out.print(queue1.remove()+" ");
p=0;
}
}
//若queue2队列已经为空,queue1仍有元素时,按顺序输出queue1剩下的元素
if(queue1.size()!=0){
for(;queue1.size()!=0;){
if(queue1.size()==1)
System.out.print(queue1.remove());
else
System.out.print(queue1.remove()+" ");
}
}
}
统计文字中的单词数量并按单词的字母顺序排序后输出
题集jmu-Java-05-集合之5-2 统计文字中的单词数量并按单词的字母顺序排序后输出 (不要出现大段代码)
5.1 实验总结
TreeSet strSet = new TreeSet();//创建TreeSet对象
strSet.add(str);//将每个单词添加进strSet
String[] arr = strSet.toArray(new String[strSet.size()] );//将Treeset中的元素转成String类型再输出
答:这题是经老师上课提醒后才做出来的,要考虑到字母顺序排序,所以要用到TreeSet排序,还有输入一段文字时要用while循环,当输入为“!!!!”时结束。
**6.1 伪代码**
int n=0;
//输入字符串并且加入map中
while(sc.hasNext()){
String x=sc.next();
if(x.equals("!!!!!"))
break;
if (!map.contains(x))
map.put(x, 1);
else
n=map.get(x)+1;
map.put(x, n);
}
Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() ;//排序
**6.2 实验总结**
答:使用到了映射map,排序需要map转换成list才能调用Collections。
**面向对象设计大作业-改进**
**7.1 完善图形界面(说明与上次作业相比增加与修改了些什么)**



组员:陈凯欣 邱晓娴
本周项目的改动:实现了页面跳转,以及点击按钮实现数量的添加;目前还在研究如何将之前的代码和gui结合在一起,因为这一点还没解决,所以购物车虽然能做得出页面但是没办法完整实现商品数量的显示,另外也还在研究如何把登录的密码改为密文.
**7.2 使用集合类改进大作业**
集合类在一开始设计的时候就有用到

#3. 码云上代码提交记录及PTA实验总结
题目集:jmu-Java-05-集合
3.1. 码云代码提交记录
在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

3.2. PTA实验

201521123034《Java程序设计》第七周学习总结的更多相关文章
- 201521123027 <java程序设计>第七周学习总结
1.本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: 源代码: //contains()方法 public boolean c ...
- 201871010106-丁宣元 《面向对象程序设计(java)》第七周学习总结
201871010106-丁宣元 <面向对象程序设计(java)>第七周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结
20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...
- 20155303 2016-2017-2 《Java程序设计》第二周学习总结
20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...
- 20145237 《Java程序设计》第九周学习总结
20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...
- 20175209 《Java程序设计》第九周学习总结
20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...
- 20175317 《Java程序设计》第九周学习总结
20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...
随机推荐
- vcruntime140.dll丢失解决
之前安装好apache2.4后,打开突然报这样的错误,所以百度一下,发现了问题所在,原因是系统需要安装一个插件,才能正常运行apache2.4 Microsoft Visual C++ 2005 Re ...
- 细说 Java 的深拷贝和浅拷贝
版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 未经允许,不得转载. 一.前言 任何变成语言中,其实都有浅拷贝和深拷贝的概念,Java 中也不例外.在对一个现 ...
- 如何两周达到150行Java程序的能力--part 2
第一次课训练营课程打通了有C语言编程通往面向对象编程的道路,然而道路依然会曲折.下图是第二次训练营课程的训练大纲,从第二次开始,每次课首先进行测试. 针对作业1的训练要求,明确定义了13个具体的测试点 ...
- 设计模式(1)--Prototype(原型模式)--创建型
1.模式定义: 原型模式就是用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象. 2.使用场景: 在原型模式中我们可以利用过一个原型对象来指明我们所要创建对象的类型,然后通过复制这个对象的 ...
- 窗体调用 OCX 的使用方法(MFC,WINFORM)
在上一篇中,我们做了一个OCX控件,叫mfcActive.ocx,在这一篇我们要做的就是使用这个ocx控件.第一步:创建一个MFC的对话框工程(其实winform 也是一样的) 第二步:在工具箱中常规 ...
- 如何做到 Laravel 配置可以网站后台配置【社交系统ThinkSNS+研发日记四】
距离上一次分享差不多一周了,本文分享下利用 Laravel 的 Bootstrapping 达到网站后台设置 laravel 配置. 需求场景 首先,ThinkSNS+ 作为一个用户可以使用的「社交系 ...
- Luogu P1649 [USACO07OCT]障碍路线Obstacle Course
题目描述 Consider an N x N (1 <= N <= 100) square field composed of 1 by 1 tiles. Some of these ti ...
- 关于JS脚本语言的基础语法
JS脚本语言的基础语法:输出语法 alert("警告!"); confirm("确定吗?"); prompt("请输入密码");为弱 ...
- 转载_2012年的Android之旅:梦想、学习、坚持、自信、淡定
原文地址:http://blog.csdn.net/luoshengyang/article/details/8452527 2012年的Android之旅:梦想.学习.坚持.自信.淡定.. ---- ...
- 不安装vc2015 Redistributable解决api-ms-win-crt-runtime-l1-1-0.dll丢失错误
一.背景 最近用到python下的cx_Oracle模块,开发环境中测试正常,用cx_freeze打包后,到用户机器上一部署,各种奇奇怪怪的问题频出,运行环境如下: a.开发环境:64位win10操作 ...