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. 码云代码提交记录

  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/tt1104/p/6682445.html
Copyright © 2011-2022 走看看