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