Collection接口(有List和Set两个子接口,不唯一,无序)
List接口(不唯一,有序) Set接口(唯一,无序)
三个实现类:ArrayList LinkedList Vector 三个实现类:HashSet TreeSet
HashSet的子类:LinkedHashSet
Collection接口中常用的方法有:add(),size(),iterator(),remove()...
ArrayList是一种可变长度的数组,属于线性结构,本质上是分配连续的数组,非线性安全的; Vector和ArrayList相比:
优点是:访问查询,遍历元素快。 线性安全,效率相对比ArrayList低
缺点是:插入和删除元素慢,因为需要大量移位,查询内容效率低下。
LinkedList是一种链表结构,在内存中的存储位置是不连续的,与ArrayList相反。
优点是:插入,删除元素快
缺点是:访问查询,遍历元素慢,因为没有固定下标
特有的方法:removeFirst,getFirst,setFirst.
removeLast,getLast,setLast.
泛型<>:限定集合中元素的类型,这样能容纳的元素类型就固定了;
语法eg:List<Student> list = new ArrayList<Student>();
作用是:1.避免强制转换 2.消除代码中的黄色警告!
Iterator<E>类:迭代器,用来遍历集合中的元素(尤其是对不能通过下标查找元素的集合)
有两个常用方法:iterator.hasNext();-->判断集合中是否有下个元素;
iterator.next();--->取到元素;
Stack类:栈(Last In Fist Out/LIFO或First In Last Out/FILO)--->后进先出或先进后出
入栈(压栈):将元素添加栈中,push();
出栈(弹栈):将元素从栈定移除,pop();
而队列:先进先出!
HashSet:是一种基于哈希表的散链存储结构,无序,唯一。
优点:添加速度快、查询速度快,删除速度快! 缺点:无序(添加顺序)
hashcode:哈希码,每个元素都有固定的哈希码值,数字的哈希码就是数字本身,Y=K(X)=X%7.
hashcode 和equals的关系:
1.在HashSet集合中实现添加元素时,会先调用Object类中的hashcode()方法,计算出当前对象的哈希码,确定其摆放位置。然后与集合中对象的hashcode进行比较,如果哈希码相同,则会调用Object中的equals()方法,比较内容是否相同!
2.如果hashcode不同,将不再调用equals方法;
3.如果equals()相同,那么hashcode肯定相同;哈希码相同,equals结果不一定相同!
4.如果向Set集合中添加对象时,想要去掉重复项,需要重写Object类中的hashcode()和equals()方法;