1.Collection接口
//java简答题
Collection c =new ArrayList();
c.add(“Java”);
c.add(new Student(1,“Tom”,60));
c.add(new Integer(12));
System.out.println(c.size());
System.out.println©;
为什么定义c为Collextion?
好处:面向接口编程,如果要把ArrayList改为HashSet则只用改第一行就可以了
//动态绑定:如果第一行这样写的话c会自动动态绑定在子类ArrayList上,从而调用子类的相应的方法
//当再将ArrayLiat修改成hashset时就会动态绑定到hashset中相应的方法上了
为什么最后一句话打印c?怎样理解
打印引用就是调用toString方法,因为c动态绑定到ArrayLiat中所以调用的时ArrayList的toString方法
//List–Collection的子接口,有顺序可重复
//主要实现类:ArrayList,LinkedList
//主要方法:
//get,set,add,remove,indexOf,lastindexOf
简答题:
ArrayList c=new Arrayist() {
Student s=new Student(1,“Tom”,60);
c.add(s);
s.setScore(80);//将学生的成绩修改为80
Stuednt t=(Student)c.get(0);//如果不想强制类型转换可以使用泛型
System.out.println(t.getScore());//结果为80
c为一个顺序表,第一个位置add了学生对象Tom的引用s,其实是将引用s复制给了第一个位置0
然后0位置和s共同指向Tom对象,通过s修改score后,再通过c访问score也就变了
//Vector(不建议使用)
也是List接口的实现类,和ArrayList一样都是可变长度的对象数组
区别:Vector是线程安全的,可以同步,运行效率低;ArrayList不同步,适合于单线程环境,效率较高
常用方法:(因为比List出现的早,所以有List中没有的方法)
//栈——继承Vector
常用方法:push,pop,peek(返回栈顶元素但不弹出栈顶元素),empty(),search()
Stack s=new Stack();
s.push(“hello”);
s.push(new Data());
s.push(100);
s.push(3.14);
s.pop();
s.peek();
while(!s.isEmpty()) {
System.out.println(s.pop());//pop函数:执行栈顶元素删除操作,返回值是删除的元素
}
为了保证栈的特点,使用栈时应该注意什么?
因为Stack继承了vector,vector又继承了List,所以会有相应的方法,比如add等,那么如何保证栈本身的“后进先出”的特性呢?
答案是在stack中不要使用add remove等list的方法,否则就没有栈的特性了,就是把栈当作一个线性表来用了。
//队列
常用方法:
入队:offer()
返回队头元素:peek,element
移除并返回队头元素:poll,remove
主要实现类:Linkedlist
//Set 接口是Collection接口的子接口,但并未提供额外方法,只是本身的元素储存特性不同
//如Set不可重复,Collection并没有这一特性
HashSet:
HashSet中使用hashcode方法和equals方法判断是否相投,为了提高效率,先调用
hashcode方法(返回hashcode值),如果相同再调用equals方法判断。
在Student中添加hashCode方法
public int hashCode() {
int result=17;
result=31*result+no;
return result;
}