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

    1. 本周学习总结

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

    答:

    2. 书面作业

    1. ArrayList代码分析
    1.1 解释ArrayList的contains源代码
    1.2 解释E remove(int index)源代码
    1.3 结合1.1与1.2,回答ArrayList存储数据时需要考虑元素的类型吗?
    1.4 分析add源代码,回答当内部数组容量不够时,怎么办?
    1.5 分析private void rangeCheck(int index)源代码,为什么该方法应该声明为private而不声明为public?

    答:1.1 源代码如下:

    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;
    }
    

    先判断所要判断包含内容是否为NULL,然后判断ArrayList是否包含NULL,而若不是NULL,之后再利用equals方法判断是否相等,最后得出结论是否包含。

    1.2 源代码如下:

    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,而后让后面进位,在使elementData总长度减一。

    1.3 不需要,因为ArrayList里面想放什么类型的都可以。

    1.4 源代码如下:

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

    其中elementData[size++] = e;就是简单的添加进去,而 ensureCapacityInternal(size + 1);// Increments modCount!!不太理解。

    1.5 这样做外部就调用不了这个方法,而外部也没有必要去调用这个方法。

    2.HashSet原理
    2.1 将元素加入HashSet(散列集)中,其存储位置如何确定?需要调用那些方法?
    2.2 选做:尝试分析HashSet源代码后,重新解释1.1

    答:2.1 散列表用链表数组实现---〉每个列表被称为桶,插入时调用对象的hashCode方法,根据哈希码查找到对应的桶。需要调用equals()和hashCode()这两个方法。

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

    答: 3.1 ArrayIntegerStack实例化的时候需要规定大小,而ArrayListIntegerStack使用list可以自动扩容。

    public ArrayListIntegerStack(){
    		list =new ArrayList<Integer>();
    	}
    
    public ArrayIntegerStack(int n) {
        this.arr = new Integer[n];
    }
    

    3.2 通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。接口是用于描述系统对外提供的所有服务,客户只需要针对接口编程即可。所以方便于编程,有条不紊。

    4.Stack and Queue
    4.1 编写函数判断一个给定字符串是否是回文,一定要使用栈,但不能使用java的Stack类(具体原因自己搜索)。请粘贴你的代码,类名为Main你的学号。
    4.2 题集jmu-Java-05-集合之5-6 银行业务队列简单模拟。(不要出现大段代码)

    答: 4.1 代码如下:

    package abc;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    interface IntegerStack{
    	public Integer push(Integer item);
    	public Integer pop();
    	public Integer peek();
    	public boolean empty();
    	public int size();
    }
    class ArrayListIntegerStack implements IntegerStack{
    	private List<Integer> list;
    	
    	public ArrayListIntegerStack(){
    		list =new ArrayList<Integer>();
    	}
    	
    	@Override
    	public Integer push(Integer item) {
    		// TODO Auto-generated method stub
    		if(item==null)
    			return null;
    		list.add(item);
    		return item;
    	}
    
    	@Override
    	public Integer pop() {
    		// TODO Auto-generated method stub
    		if(list.size()==0)
    			return null;
    		return list.remove(list.size()-1);
    	}
    
    	@Override
    	public Integer peek() {
    		// TODO Auto-generated method stub
    		if(list.size()==0)
    			return null;
    		return list.get(list.size()-1);
    	}
    
    	@Override
    	public boolean empty() {
    		// TODO Auto-generated method stub
    		return list.size()==0?true:false;
    	}
    
    	@Override
    	public int size() {
    		// TODO Auto-generated method stub
    		return list.size();
    	}
    
    	@Override
    	public String toString() {
    		return list.toString();
    	}
    	
    }
    public class Main201521123029{
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		ArrayListIntegerStack a= new ArrayListIntegerStack();
    		ArrayListIntegerStack c= new ArrayListIntegerStack();
    		Scanner in=new Scanner(System.in);
    		int m=in.nextInt();
    		int[] abc=new int[m];
    		for(int i=0;i<m;i++){
    			Integer b=in.nextInt();
    			a.push(b);
    			abc[i]=b;
    		}
    		for(int i=0;i<m;i++){
    			c.push(a.pop());
    			
    		}
    		boolean f=true;
    		for(int i=0;i<m;i++){
    			if(!c.pop().equals(abc[i])) {
    				f=false;
    				break;
    			}
    		}
            if (f) {
                System.out.println("yes");
            } else {
                System.out.println("no");
            }
    	}
    }
    

    结果如下:

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

    答:代码如下:

    String str;
    		Set<String> strset=new TreeSet<String>();
    		for(i=0;;i++){
    			str=in.next();
    			if(str.equals("!!!!!")) break;
    			else strset.add(str);
    		}
    

    使用TreeSet有排序的功能,而不使用HashSet.

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

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

  • 相关阅读:
    服务部署 RPC vs RESTful
    模拟浏览器之从 Selenium 到splinter
    windows程序设计 vs2012 新建win32项目
    ubuntu python 安装numpy,scipy.pandas.....
    vmvare 将主机的文件复制到虚拟机系统中 安装WMware tools
    ubuntu 修改root密码
    python 定义类 简单使用
    python 定义函数 两个文件调用函数
    python 定义函数 调用函数
    python windows 安装gensim
  • 原文地址:https://www.cnblogs.com/m1ng123/p/6682492.html
Copyright © 2011-2022 走看看