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

    1. 本周学习总结

    2. 书面作业

    1.ArrayList代码分析

    1.1 解释ArrayList的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是一个用来判断某个ArrayList中是否包含某个对象或者元素,其中indexOf是用来查找该对象或者元素所在位置的方法,如果该对象或者元素存在,则indexOf方法返回其位置,
       如果不存在,则返回-1
    

    1.2 解释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;
        }
    
    答:首先根据指定的位置找到要删除的元素,然后将该元素移除,向左移动所有后续元素,再将长度减1。
    

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

    答:不用考虑,因为其参数为Object类的对象,Object类是其他所有类的父类
    

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

    add的代码为:

    public void add(int index, E element) {
            if (index > size || index < 0)
                throw new IndexOutOfBoundsException(
                "Index: "+index+", Size: "+size);
            ensureCapacity(size+1);  // Increments modCount!!
            System.arraycopy(elementData, index, elementData, index + 1,
                 size - index);
            elementData[index] = element;
            size++;
        }
    
    答:add方法是先判断需要加入新元素的位置是否超过数组容量,如果超过,则先扩大数组容量,使其长度加1。
    

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

    答:因为该方法只是用来判断给定的索引是否在范围内,有没有越界,外部并不需要访问它,更不能修改它,只需要知道结果就好,所以声明为private即可。
    

    2.HashSet原理

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

    答:链表是HashSet的存储形式,我们每添加一个元素时,调用hashCode()方法得到其hashCode值,然后确定存储位置。
    需要调用hashCode()方法和equals()方法。
    

    2.2 选做:尝试分析HashSet源代码后,重新解释1.1

    3.ArrayListIntegerStack

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

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

    答:ArrayListIntegerStack是用ArrayList来实现栈,ArrayIntegerStack是用Integer数组来实现栈。
    一个是使用动态数组,而另一个是规定数组的大小。
    

    3.2 简单描述接口的好处.

    答:可以使内部实现细节与该类实现后的用法独立,无论内部数据保存方式、方法如何,在外部使用该类都是一样的,
    

    4.Stack and Queue

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

    package main;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    class ArrayListStringStack {
        private List<String> list;
        
        public ArrayListStringStack() {
            list=new ArrayList<String>();
        }
    
        public String push(String item) {
            if(item==null)
                return null;
            list.add(item);
            return item;
        }
    
        public String pop() {
            if(list.isEmpty())
                return null;
            return list.remove(list.size()-1);
        }
    
    }
    
    public class Main201521123075 {
        public static void main(String[] args) {
            Scanner a = new Scanner(System.in);
            ArrayListStringStack stack = new ArrayListStringStack();
            String s=a.nextLine();
            for(int i=0;i<s.length();i++)
            {
                stack.push(String.valueOf(s.charAt(i)));
            }
            for(int i=0;i<s.length();)
            {
                
                if(!String.valueOf(s.charAt(i)).equals(stack.pop()))
                {
                    System.out.println("不是回文字符串");
                    break;
                }
                else 
                    System.out.println("是回文字符串");
                    break;
            }
            a.close();
        }
    }
    

    运行结果为:

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

    //奇偶分队
    for(i = 0; i < n; i++){
        int temp=in.nextInt();
        if((temp%2)!=0)
            A.add(temp);
        else
            B.add(temp);
    }
    for(i=0;i<n;i++){
        for(int j=0;j<2;j++){
            if(!A.isEmpty())
                C.add(A.poll());
        }
        if(!B.isEmpty())
            C.add(B.poll());
    }
    //输出
    for(i=0;i<n-1;i++)
        System.out.print(C.poll()+" ");
    System.out.print(C.poll());
    

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

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

    做这题时,先做到数组中无重复对象,再排序即可。
    

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

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

    7.2 使用集合类改进大作业

    参考资料:
    JTable参考项目

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

    题目集:jmu-Java-05-集合
    3.1. 码云代码提交记录

  • 相关阅读:
    Servlet的生命周期
    Servlet中的请求与响应
    Servlet中的相关的配置文件信息:
    转发与重定向的区别,笔记无法转过来,所以直接放链接了,可以直接查看
    JSP入门中的一些案例代码:
    一些已经有些模糊的小知识(一)
    JSP入门五之request,out,response对象的应用
    JSP入门四
    JSP入门三 不知道如何将笔记同步过来只能这样了
    来自(乐唯科技)的面试问题..
  • 原文地址:https://www.cnblogs.com/tt1104/p/6682445.html
Copyright © 2011-2022 走看看