• 201521123067 《Java程序设计》第7周学习总结


    201521123067 《Java程序设计》第7周学习总结


    1. 本周学习总结

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



    2. 书面作业


    Q1.ArrayList代码分析

    1.1 解释ArrayList的contains源代码

    以下是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;
        }
     public boolean equals(Object obj) {
        return (this == obj);
        }
    
    答:contains是一个用来判断某个ArrayList中是否包含某个对象或者元素,其中indexOf是用来查找该对象或者元素所在位置的方法,如果该对象或者元素存在,则indexOf方法返回其位置,如果不存在,则返回-1,contains方法再根据indexOf方法的返回值来确定是否含有该对象或者元素,如果indexOf方法的返回值>=0,则contains方法返回true,如果indexOf方法的返回值<0,则contains方法返回false。
    

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

      public E remove(int index) {
            RangeCheck(index);
            modCount++;
            E oldValue = (E) elementData[index];
            int numMoved = size - index - 1;
            if (numMoved > 0)
                System.arraycopy(elementData, index+1, elementData, index,numMoved);
            elementData[--size] = null; // Let gc do its work
            return oldValue;
        }
    
    答:首先根据指定的位置找到要删除的元素,然后将该元素移除,向左移动所有后续元素,再将长度减1。
    

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

    答:ArrayList存储数据时不需要考虑元素的类型。
    

    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 void rangeCheck(int index)的源代码:

    private void rangeCheck(int index) {
            if (index >= size) {
                throw new RuntimeException("range out");
            }
    }
    
    答:因为将rangeCheck用private修饰可以不被外界任意修改,并且具有隐私性,不被随意调用,如果用public来修饰,那么该方法就可以被外界看到,并且能被任意调用。
    

    Q2.HashSet原理

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

    答:当向HashSet(散列集)中增加新对象时,首先根据哈希函数计算要增加对象的hashCode码,根据该值来得到一个位置用元素来存放当前对象。如果在该位置上没有东西的话,那么HashSet认为该元素在集合中不存在,直接增加进去。如果在该位置已经有一个元素了,接着将准备增加到集合中的元素与该位置上的元素用equals方法进行比较。如果该equals方法返回false,那么说明HashSet中不存在该元素,再进行一次散列,将该元素放到散列后计算出来的地址中。如果equals方法返回true,那么说明HashSet中已经存在该元素了,不再将该元素增加到HashSet中。此过程需要调用的是equals方法和insert方法。
    

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

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

    答:在题集jmu-Java-04-面向对象2-进阶-多态、接口与内部类中的题目5-3是定义了Integer[]来存放输入的数据,然后再用ArrayIntegerStack类来对输入的数据进行需要的操作;而题集jmu-Java-05-集合之5-1 ArrayListIntegerStack中用list来存放输入的数据,并直接使用list中的操作就可以满足题目中的要求了。
    

    3.2 简单描述接口的好处。

    答:接口的好处:能使整个结构清晰,类之间的通信简单易懂,扩展性好,提高复用性,我个人感觉,面向接口编程能够使整个代码都很有条理,在修改的时候很方便,这是切身体会!!而且采用面向接口编程的话,其他人一看你的代码就能明白你在写什么,大概想实现哪些功能,一目了然,便于查看。
    

    Q4.Stack and Queue

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

    package huiwen;
    
    import java.util.Scanner;
    
    class StackString {
    	public int maxSize;
    	private char[] array;
    	private int top;
    
    	public StackString(int maxSize) {
    		this.maxSize = maxSize;
    		array = new char[maxSize];
    		top = -1;
    	}
    
    	public void push(char i) {
    		array[++top] = i;
    	}
    
    	public char pop() {
    		return (array[top--]);
    	}
    
    	public int peak() {
    		return (array[top]);
    	}
    
    	public boolean isEmpty() {
    		return (top == -1);
    	}
    
    	public boolean isFull() {
    		return (top == maxSize - 1);
    	}
    }
    
    public class Main201521123067 {
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		System.out.println("请输入一个字符串:");
    		String s = scanner.next();
    		StackString stack = new StackString(s.length());
    		char[] c = s.toCharArray();
    		for (int i = 0; i < c.length; i++) {
    			stack.push(c[i]);
    		}
    		System.out.println();
    		boolean b = true;
    		for (int i = 0; i < stack.maxSize; i++) {
    			if (c[i] != stack.pop()) {
    				b = false;
    				break;
    			}
    		}
    		if (b)
    			System.out.println("该字符串是回文!");
    		else
    			System.out.println("该字符串不是回文!");
    	}
    }
    
    
    以下是运行结果的截图:


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

    实验总结:
    ●5-6这道题我主要是运用了栈的形式来处理,首先设立A和B两个栈,然后将偶数放入B栈,将奇数放入A栈,接着将它们按规定顺序一一出栈并输出就可以了。不过在这题中的格式要求比较严格,需要仔细思考一下才能想出来怎么做。

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

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

    5.1 实验总结

    ●在5-2这题中,主要是需要学会用TreeSet,用JDK文档可以搜索到TreeSet的详细信息,看完之后就会使用它了。在此题中需要使用到TreeSet中的add(E e)方法、pollFirst()方法、size()方法,用上这些,这道题很快就能做出来了。

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

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

    7.2 使用集合类改进大作业

    与上次相比,我增加了许多功能,例如菜单栏和菜单项,还有将搜索框中的文字输出,具体的见下图:









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

    3.1. 码云代码提交记录

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

  • 相关阅读:
    用Python查找数组中出现奇数次的那个数字
    python之路--MySQL多表查询
    python之路--MySQl单表查询
    python之路--MySQL 库,表的详细操作
    python之路--MySQL数据库初识
    python之路--线程的其他方法
    python之路--关于线程的一些方法
    python之路--管道, 事件, 信号量, 进程池
    python之路--进程内容补充
    python之路--操作系统介绍,进程的创建
  • 原文地址:https://www.cnblogs.com/yjliao/p/6669042.html
Copyright © 2020-2023  润新知