1. 本章学习总结

*2. 书面作业
1.ArrayList代码分析
1.1 解释ArrayList的contains源代码

该源代码验证该ArrayList中是否包含某个对象,contains的实现即遍历一次ArrayList。若equals,则返回序号。当然,如果对象为空,就没有equals方法

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

先检查要删除的位置如果超出List大小,就抛出IndexOutOfBoundsException异常,即删除此列表中指定位置的元素,将index后面的所有元素全部往前移动,将最后多余的引用置为null。

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

不用考虑,ArrayList在存放的时候可以是不同种类型的元素,因为ArrayList可以存储Object。任何类型的元素都是可以在ArrayList储存。

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

源代码中,将指定的元素到这个列表的末尾,ensureCapacityInternal用来调整容量,当内部数组容量不够时,调用grow方法增加容量,引用了一个大小为原来数组1.5倍的新数组。

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

private声明别的用户或者类不能调用,而public则任何用户和类都可以调用。rangeCheck用于边界检查,rangeCheck方法保证了remove等操作需在容量范围内,超出范围就会抛出异常。

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

散列表采用Hash算法决定集合元素的存储位置,计算出待存储对象的散列码,作为存储的位置的依据,发生冲突时,则连接在发生冲突的元素的后面,用链表连接。将对象存入Hash类集合,需要用到hashCode()方法和equals()方法。

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

ArrayIntegerStack实例化的时候需要规定大小,而ArrayListIntegerStack使用list可以自动扩容。
ArrayListIntegerStack不需要使用指针,可以直接通过list的一些方法来进行删除,查找等操作,而数组增删查改都要自己编写方法。

3.2 简单描述接口的好处

接口使同样的方法和操作可以有不同的实现,也可以供不同的类使用,规范了编程流程。

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

public class Main201521123095 {

public static void main(String[] args) {
// TODO Auto-generated method stub
    Stack<Character> stack = new Stack<Character>();
    Scanner scanner = new Scanner(System.in);
    int a = 1;
    String string = scanner.next(); 
    for (int i = 0; i < string.length(); i++) {
        stack.push(string.charAt(i));      //入栈
    }

    for (int j= 0; j < string.length(); j++) {
        if (stack.pop() != string.charAt(j)) {
            //一个个出栈并与字符串进行对比
            System.out.println("no");
            break;
        }
        else {
            System.out.println("yes");
            break;
        }
    }
 }
}
    4.1实验总结:利用接口,复写入栈,出栈的方法,取栈顶元素的方法

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

while(!A.isEmpty() || !B.isEmpty())
    {
        Integer a1 = A.poll();
        if(a1 != null){
            if(B.isEmpty() && A.isEmpty())
            System.out.print(a1);
            else 
                System.out.print(a1 + " "); 
        }
        
        Integer a2 = A.poll();
        if(a2 != null){
            if(B.isEmpty() && A.isEmpty())
            System.out.print(a2);
            else 
                System.out.print(a2 + " "); 
        }
        Integer b = B.poll();
        if(b != null){
            if(B.isEmpty() && A.isEmpty())
            System.out.print(b);
            else 
                System.out.print(b + " ");
        }
        
    }  

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

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

while (input.hasNextLine()) {
            String str = input.next();
            if (str.equals("!!!!!")){
                break;}
            else if (!str.contains(str))
                str.add(str);
        }
5.1 实验总结:这题关键就是使用了Set的自然排序实现类TreeSet,此类可以对添加的对象进行默认排序。

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