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

    1. 本章学习总结

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

    2. 书面作业

    1. ArrayList代码分析

    1.1 解释ArrayList的contains源代码

    • 首先查看ArrayList源代码,找到contain方法

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

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

    • 同样先找到E remove(int index)方法

    • E remove(int index)执行后,先检查索引范围RangeCheck(index),然后将要删除的元素赋值于oldValue,从数组中移除元素后,被移除的元素以后的所有元素的向左移动一个位置,最后返回被删除元素。

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

    • 不需要。ArrayList内部使用Object数组来保存收集的对象,而Object类是所有类的父类。

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

    • 查看源代码

    • 如果超出,数组将会进行扩容,以满足添加数据的需求。数组扩容通过一个公开的方法ensureCapacity(int minCapacity)来实现。

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

    • 查看源代码

    • rangeCheck()方法保证index在ArrayList长度范围之内(index < size()),并在越界时抛出IndexOutOfBoundsException异常,被get(int index)、set(int index, E element)、remove(int index)调用。

    2. HashSet原理

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

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

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

    public HashSet(int initialCapacity) {
        map = new HashMap<>(initialCapacity);
    }
    
    • 对于HashSet而言,它是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素。

    3. ArrayListIntegerStack

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

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

    • ArrayIntegerStack实例化的时候需要规定大小,而ArrayListIntegerStack使用list可以自动扩容。此外,在ArrayIntegerStack中,出栈入栈等操作需要用到指针,而ArrayListIntegerStack使用list则不需要使用指针,可以直接通过list的一些方法来进行删除,查找等操作。

    3.2 简单描述接口的好处.

    • 解决不同的对象的相同需求。比如shape和employee,都存在比较这一操作,但需求不同,前者比较面积,后者比较薪水。

    4. Stack and Queue

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

    class StackArray{
    	ArrayList<Character> arr = new ArrayList<Character>();
    	public StackArray(String s){
    	    for(int i=0;i<s.length();i++)
    	        arr.add(s.charAt(i));
    	}
    	public Character push(Character c){
        	arr.add(c);
        	return c;
    	}
    	public Character pop() {
        	return arr.remove(arr.size() - 1);
    	}
    	public int size(){
        	return arr.size();
    	}
    }
    public class Main201521123046 {
    	public static void main(String[] args) {
    	    Scanner sc = new Scanner(System.in);
    	    String s = sc.nextLine();
    	    StackArray str = new StackArray(s);
    	    for(int i=0;i<str.size();i++){
    	        if(s.charAt(i) != str.pop()){
    	            System.out.println("NO");
    	            return;
    	        }
    	    }
    	    System.out.println("YES");
    	}
    }
    

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

    Queue<Integer> A = new LinkedList<Integer>();
    Queue<Integer> B = new LinkedList<Integer>(); 
    

    if(m % 2 == 0)		B.add(m);
    else	A.add(m);               //根据奇偶序号分别入栈
    

    while{                          //根据出队速度不同,A为B两倍,即A出队两个B出队一个
    	Integer a1 = A.poll();      //poll返回队头
    	System.out.print(a1);
    
    	Integer a2 = A.poll();
    	System.out.print(a2);
    
    	Integer b = B.poll();
    	System.out.print(b);
    	}
    

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

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

    Set<String> set = new TreeSet();     //TreeSet可以确保集合元素处于排序状态
    

    while(in.hasNext()){
    	String s = in.next();
    	if (s.equals("!!!!!"))break;
    		set.add(s);
    }                                    //add添加新单词到表尾
    System.out.println(set.size());      //size统计表长即单词数
    for循环输入
    

    5.1 实验总结

    TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。
    TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0。

    6. 选做:加分考察-统计文字中的单词数量并按出现次数排序

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

    6.1 伪代码

    6.2 实验总结

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

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

    • 添加结算模块

    7.2 使用集合类改进大作业

    public class ShoppingCart implements Search{
    	ArrayList<Good> car = new ArrayList<Good>();
    
    	public void add(Good c)
    	{
    	    this.car.add(c);
    	}
    	.......
    }
    

    3. 使用码云管理Java代码

  • 相关阅读:
    Quicksum -SilverN
    uva 140 bandwidth (好题) ——yhx
    uva 129 krypton factors ——yhx
    uva 524 prime ring problem——yhx
    uva 10976 fractions again(水题)——yhx
    uva 11059 maximum product(水题)——yhx
    uva 725 division(水题)——yhx
    uva 11853 paintball(好题)——yhx
    uva 1599 ideal path(好题)——yhx
    uva 1572 self-assembly ——yhx
  • 原文地址:https://www.cnblogs.com/ghnb/p/6682752.html
Copyright © 2011-2022 走看看