zoukankan      html  css  js  c++  java
  • 201521123121 《JAVA程序设计》第7周学习总结

    1. 本周学习总结

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

    参考资料:

    XMind

    2. 书面作业

    ArrayList代码分析

    1.1 解释ArrayList的contains源代码

    /**
     * 判断动态数组是否包含元素o
     */
    public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }
    
    /**
     * 返回第一个出现的元素o的索引位置
     */
    public int indexOf(Object o) {
        if (o == null) {//返回第一个null的索引
            for (int i = 0; i < size; i++)
                if (elementData[i] == null)
                    return i;
        } else {//返回第一个o的索引
            for (int i = 0; i < size; i++)
                if (o.equals(elementData[i]))
                    return i;
        }
        return -1;//若不包含,返回-1
    }
    
    /**
     * 返回最后一个出现的元素o的索引位置
     */
    public int lastIndexOf(Object o) {
        if (o == null) {
            for (int i = size - 1; i >= 0; i--)
                if (elementData[i] == null)
                    return i;
        } else {
            for (int i = size - 1; i >= 0; i--)
                if (o.equals(elementData[i]))
                    return i;
        }
        return -1;
    }
    

    首先调用indexOf(),判断传入的对象是否为空,如果为空,则遍历整个集合的元素,如果集合的某个元素为空,返回该元素的下标。
    如果传入对象不为空,则遍历整个集合的元素,如果该元素和集合内某个元素的equals比较结构为true,返回该元素下标。
    如果遍历完集合后没有元素存在于集合中就返回-1。最后如果indexOf()方法返回大于0,就说明集合内存在该元素,小于0则不存在

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

    /**
     * 删除指定索引index下的元素,返回被删除的元素
     */
    public E remove(int index) {
        RangeCheck(index);//检查索引范围
    
        E oldValue = (E) elementData[index];//被删除的元素
        fastRemove(index);
        return oldValue;
    }
    

    remove是将index下标的元素去除掉之后,后续元素依次向前移动

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

    不需要,arr是一个动态数组(ArrayList),其中可以放进去多种类型的数据

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

    新建一个新的数组,长度为内部的一个函数进行计算后返回的结果.之后对a进行copy。copy两次。
    第一次copy为从0开始,copy长度为index。
    第二次为从index+1开始,copy长度为s-index.其实最终目的就是把中间index下标空出来。再将objcet 复制给 a[index]

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

    使用private,外部类不能直接访问修改该方法,因为外部类没有修改方法的必要,使用public并不是不可以

    HashSet原理

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

    向HashSet中添加一个元素时,HashSet会调用该对象的hashCode()方法得到其hashCode值,然后根据该值决定该对象的存储位置,
    但是如果有两个元素通过equals()方法比较返回true,而它们的hashCode()方法返回值不等,HashSet也会将它们存储在不同的位置

    ArrayListIntegerStack

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

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

    ArrayListIntegerStac使用ArrayList存储,可以扩充容量;ArrayIntegerStack使用integer数组,数组容量需要事先设定

    3.2 简单描述接口的好处.

    接口更容易实现扩展功能,java类与类之间只能单继承,类与接口之间可以多实现,不改源码,可以定义多个接口增强功能,以后复写接口中的抽象方法
    写小的应用程序看不到接口的优势,写大点的程序就显示出接口的优势

    Stack and Queue

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

    public class Main2015121 {
    
    public static void main(String[] args) {
        Stack<Character> stack = new Stack<Character>();
        Scanner scanner = new Scanner(System.in);
        int a = 1;
        String string = scanner.next(); 
        for (int i = 0; i < string.length(); i++) {
            stack.push(string.charAt(i)); 
        }
       for (int j= 0; j < string.length(); j++) {
            if (stack.pop() != string.charAt(j)) {
                System.out.println("否");
                break;
            }
            else {
                System.out.println("是");
                break;
                }
            }
         }
    }
    

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

    首先需要针对 A 和 B 业务设计两个循环队列,分别处理两类业务请求;
    然后 根据输入序列整数的奇偶性将各个整数分配到这两个队列中。
    另外,需要设计针 对两个队列处理过程的流程,这是一个循环。
    在循环中,先从 A 队列中输出两个 元素,然后再从 B 队列中输出一个元素。当发现某一个队列中的元素为空时,输 出另一个队列中的所有元素
    注意对队列满、空情况的 判断。

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

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


    这里可以用String里的split方法分割这个字符串,这样就可以统计单词数和排序了

    5.1 实验总结

    还可以用Scanner类,Scanner类是一个扫描器,它可以扫描根据我们的要求字符串,达到想要的结果

    面向对象设计大作业-改进
    7.1 完善图形界面(说明与上次作业相比增加与修改了些什么)
    7.2 使用集合类改进大作业
    参考资料:
    JTable参考项目

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

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

    3.1. 码云代码提交记录

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

  • 相关阅读:
    5G(NR)无线网络协议栈 (层2和层3)
    tcp,udp报文最大长度
    MSS与MTU的关系
    5G网络(接入网+承载网+核心网)
    华为发布:5G时代十大应用场景白皮书(附下载)
    爱码仕 解读5G(八)再见了,SIM卡
    爱码仕 解读5G (七)无线娱乐在家里、在车里、在加油站、在充电站、在高速公路休息区
    爱码仕 解读5G (六)健康管理和无线医疗
    爱码仕 解读5G (五)能源领域 电力馈线自动化 智慧油田 智慧海洋
    在DevExpress中使用CameraControl控件进行摄像头图像采集
  • 原文地址:https://www.cnblogs.com/toonaive/p/6680678.html
Copyright © 2011-2022 走看看