1. 本周学习总结


2. 书面作业

1.ArrayList代码分析

1.1 解释ArrayList的contains源代码

下面先贴出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;

contains(Object o)作用是判断字符串中是否含有 o ,由于contains是boolean型,所以返回值只有true 和false 。定义一个搜索函数indexOf(Object o),如果有搜索到与传入进来的Object一样的值的话,返回i值,i值必然是大于等于0的整数,所以最后在

return indexOf(o) >= 0;中会返回true,表示字符串中包含 o ,否则return -1,返回false,不包含 o 。

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

下面先贴出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; // clear to let GC do its work  

       return oldValue;
       }  

首先通过rangeCheck(index);判断index是否超出界限,numMoved是指被移除的元素后面还有的元素的个数,然后通过arraycopy将index+1往后的元素前移一位,然后数组大小减一,完成操作。

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

ArrayList是专门设计用来存储对象的一个可变大小的类,在存储数据的时候不需要考虑数组元素的类型,会进行自动的转换。

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

下面先贴出ArrayList.add的源代码:

    public boolean add(E e) {
    ensureCapacityInternal(size + 1);
    elementData[size++] = e;
    return true;
    }

检查当前集合中是否有空间可以容纳下一个新的元素,如果容不下,则进行扩容,这个方法是在集合的末端扩容。

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

这边先贴出源代码:

    private void rangeCheck(int index) {
    if (index >= size)
    throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
    }

经过查询资料可以发现rangeCheck会被以下代码调用:

  • get(int index)
  • set(int index, E element)
  • remove(int index)

    使用private的原因是不想让用户获取到代码,只要让他知道改代码可以完成某个操作即可。

2.HashSet原理

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

在我们将元素加入HashSet的时候,会先得到HashCode值确定存储位置

  • 调用HashCode()得到HashCode值
  • 调用equals(),跟已有的元素进行比较,比较为假,则插入,比较为真,则替换

3.ArrayListIntegerStack

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

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

  • 在ArrayIntegerStack中,内部使用数组实现栈,而在ArrayListIntegerStack中是使用ArrayList来实现栈操作。
  • 因为ArrayIntegerStack是使用数组来实现栈,所以在入栈的时候会出现栈满的状况导致无法入栈,而ArrayListIntegerStack是使用ArrayList,在上边已经说过ArrayList可以实现自动扩容,所以不存在栈满的情况。

3.2 简单描述接口的好处.

  • 在接口中定义了抽象的方法,可以很清晰的知道在该代码中会运用到哪些方法,增加代码的阅读性。
  • 类可以继承接口实现不同的操作,重写方法,提高效率。

4.Stack and Queue

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

    public class Main201521123112 {

public static void main(String[] args) {
    Scanner sc=new Scanner (System.in);
    String str="201521123112";
    System.out.println(isPalindromeNumber(str));
}
private static boolean isPalindromeNumber(String str) {
    ArrayListIntegerStack judge=new ArrayListIntegerStack();
    char[] charArray = str.toCharArray();
    for(int i=0;i<str.length()/2;i++){
        judge.push(String.valueOf(charArray[i]));   //压入栈中
    }
    for(int i=charArray.length/2;i< charArray.length;i++ ){
    if(judge.pop().equals(String.valueOf(charArray[i])))
        return true;
    }
    return false;
}

interface IntegerStack{
    public String push(String item);
    public String pop();
    public String peek();
    public boolean isempty();
        }
class ArrayListIntegerStack implements IntegerStack{
    private List<String> list;
    public ArrayListIntegerStack(){
        list=new ArrayList<String>();
    }
    @Override
    public String push(String item) {
        if(item.equals("")) return null;
        else list.add(item);
        return item;
    }

    @Override
    public String pop() {
        if(list.size()==0) return null;
        else
        return list.remove(list.size()-1);
    }

    @Override
    public String peek() {
        if(list.size()==0)
            return null;
        return list.get(list.size()-1);
    }

    @Override
    public boolean isempty() {
        return list.size()==0?true:false;
    }

    }
        }

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

分成奇、偶两队,分别为A、B

按照2:1入队,然后输出队列即可

    while (!A.isEmpty() || !B.isEmpty()) {
if(!A.isEmpty()) C.offer(A.poll());
if(!A.isEmpty()) C.offer(A.poll());
if(!B.isEmpty()) C.offer(B.poll());

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

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

5.1 实验总结

将输入的单词放入TreeSet中:

            while(sc.hasNext()){
        String a=sc.next();
        if(a.equals("!!!!!")) break;
        str.add(a);
    }

然后将TreeSet转换成Array后,循环输出。


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

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

由于前两次作业大作业没有做完,这次开始做,比较简陋

登录界面用户名或者密码输错,弹出下框:

登录成功进入菜单,添加物品进入购物车结算:

购物车商品列出,结算:

7.2 使用集合类改进大作


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

3.1. 码云代码提交记录

3.2. PTA实验

  • 编程(5-1, 5-2, 5-3(选做), 5-6)
  • 实验总结已经在作业中体现,不用写。

201521123112《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. 不受控制的 position:fixed

    本文为纯理论文章,没有 Demo,没有配图,可能会略微枯燥. 大家都知道,position:fixed 在日常的页面布局中非常常用,在许多布局中起到了关键的作用.它的作用是: position:fix ...

  2. 【FAQ系列】:DB服务器产生大量物理读问题优化思路

    一 [现象] 1.7点到9点IO监控指标util特别高,如下: 2 .查看读写情况:读产生很高的物理IO,如下 [分析]:对比其他服务器,buffer pool都是80G,正常情况下热点数据都是从bu ...

  3. NOIP2000提高组 单词接龙

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的"龙"(每个单词都最多在"龙" ...

  4. TCP/IP、Http、Socket的区别与关系

    --TCP/IP.Http.Socket的区别与关系 --------------------------------------2014/05/14 网络由下往上分为 物理层.数据链路层.网络层.传 ...

  5. Oracle基础--命令

    ====================== 基础命令====================== 1.su – oracle 不是必需,适合于没有DBA密码时使用,可以不用密码来进入sqlplus界 ...

  6. Ubuntu下OpenCV不能被某个python版本识别

    Ubuntu下OpenCV不能被某个python版本识别 Solution: 可以进入相应版本的python,查看该python的path: python import sys print(sys.p ...

  7. python之----------字符编码具体原理

    1.内存和硬盘都是用来存储的. CPU:速度快 硬盘:永久保存 2.文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就可以启动一个进程,是在内存中的,所以在编辑器编 ...

  8. %appdata%目录下配置文件修改

    %appdata%目录下配置文件修改 1.假设%appdata%\leez Program目录下有Cache子目录和配置文件Config.ini内容为: [Version] Version=1.0.0 ...

  9. 【Eclipse】代码格式化 快捷键无效

    原因:搜狗输入法 简繁切换与eclipse代码格式化冲突 解决:在搜狗输入法-->按键-->修改即可.

  10. Android 读写文件

    Android 读写文件 Android使用一个非常类似与其他平台上的基于磁盘的文件系统. 这节课讲述如何利用File APIs在Android文件系统中读写文件. File 对象非常适合于流式顺序数 ...