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判断是否要扩容。
参考资料

>
![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170407181625613-919350759.png)
![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170407181647253-1650872466.png)
![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170407181709957-1479271663.png)

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>
![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170408093430253-1614157548.png)
![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170408093507675-1836721324.png)
![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170408093530082-1260939366.png) **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 完善图形界面(说明与上次作业相比增加与修改了些什么)**
![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170408185517597-1117798919.png) ![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170408185525816-1454348896.png)
![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170408185536207-961168244.png)

组员:陈凯欣 邱晓娴

本周项目的改动:实现了页面跳转,以及点击按钮实现数量的添加;目前还在研究如何将之前的代码和gui结合在一起,因为这一点还没解决,所以购物车虽然能做得出页面但是没办法完整实现商品数量的显示,另外也还在研究如何把登录的密码改为密文.

**7.2 使用集合类改进大作业**

集合类在一开始设计的时候就有用到

![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170408185739410-1669414707.png)
#3. 码云上代码提交记录及PTA实验总结
题目集:jmu-Java-05-集合 3.1. 码云代码提交记录 在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图
![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170407095102207-1700433581.png) 3.2. PTA实验 ![](http://images2015.cnblogs.com/blog/1109692/201704/1109692-20170407095207957-1193639474.png)

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

  1. 201521123027 <java程序设计>第七周学习总结

    1.本周学习总结 2.书面作业 Q1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 答: 源代码: //contains()方法 public boolean c ...

  2. 201871010106-丁宣元 《面向对象程序设计(java)》第七周学习总结

    201871010106-丁宣元 <面向对象程序设计(java)>第七周学习总结 正文开头: 项目 内容 这个作业属于哪个课程 https://home.cnblogs.com/u/nwn ...

  3. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  4. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

  5. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  6. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  7. 20155303 2016-2017-2 《Java程序设计》第二周学习总结

    20155303 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 『注意』 "//"为单行批注符: "/*"与&quo ...

  8. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

  9. 20175209 《Java程序设计》第九周学习总结

    20175209 <Java程序设计>第九周学习总结 一.教材知识点总结 有关数据库下载中存在可能出现的问题已经在博客<数据库安装和使用过程中出现的一些问题>给出了相应的解决办 ...

  10. 20175317 《Java程序设计》第九周学习总结

    20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...

随机推荐

  1. Exceptionless 本地部署踩坑记录

    仅已此文记录 Exceptionless 本地部署所遇到的问题 1.安装ElasticSearch文本 执行elasticsearch目录中的elasticsearch.bat 没有执行成功. 使用命 ...

  2. css的一些问题

    background-size ie8不支持怎么解决? background-size这个属性是css3,新增的属性,现在很多浏览器已经支持了,但是IE系列的浏览器却没有支持,比如IE8,下面介绍下如 ...

  3. 计蒜客模拟赛D1T2 蒜头君的树:树上节点之间最短距离和

    题目链接:https://nanti.jisuanke.com/t/16446 题意: 给你一棵有n个节点的树以及每条边的长度,输出树上节点之间的最短距离和.然后进行m次操作,每次操作更改一条边的长度 ...

  4. Hadoop集群环境搭建(一)

    1集群简介 HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起 HDFS集群: 负责海量数据的存储,集群中的角色主要有 NameNode / DataN ...

  5. css3中的动画效果

    css3中的animation属性动画效果代码如下: <!DOCTYPE html> <html lang="en"> <head> <m ...

  6. css一长串连续英文字符的换行

    在标签内,中文的换行是没有什么问题的,但英文的换行就有问题.当出现一长串连续的英文字符时,换行就失效了,内容会溢出.解决这个问题只需要一行css就够了: p{ word-wrap: break-wor ...

  7. 淘宝IP地址库采集

    作者:阿宝 更新:2016-08-31 来源:彩色世界(https://blog.hz601.org/2016/08/31/taobao-ip-sniffer/index.html) 简述 当初选择做 ...

  8. spring boot 登录注册 demo (二) -- 数据库访问

    通过data-jpa来访问数据库 <dependency> <groupId>org.springframework.boot</groupId> <arti ...

  9. 基于ExtJs6前台,SpringMVC-Spring-Mybatis,resteasy,mysql无限极表设计,实现树状展示数据(treepanel)

    先从后台讲起 1.表的设计 parent_id就是另外一条记录的id,无限极表设计可以参考  http://m.blog.csdn.net/Rookie_Or_Veteran/article/deta ...

  10. hdu3416 Marriage Match IV(最短路+网络流)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3416 题意: 给出含n个点.m条有向边的图,每条边只能走一次,给出起点和终点,求起点到终点的最短路径有 ...