集合
概念:集合是长度可以改变,存放任意数据类型的动态数组
Collection
接口:存放无序、不唯一的对象。一般不会直接使用该接口来实现。
Collection api:
- obj.size()获取集合长度;
- isEmpty()判断集合是否为空;
- contains()判断集合是否包含某个元素;
- add()向集合中添加某个元素;
- remove()删除;
- void clear()把集合清空;
- equals()判断两个集合是否相等;
- hashCode()返回hash值;
- Iterator iterator用迭代遍历集合;
- Object[] toArray将集合转化成Object类型数组等;
Collection子接口
List:存放有序、不唯一的对象;
List api:
1.get()通过下标获取集合中的元素
2.set()向集合指定位置添加元素,如该位置已经有元素了就替代之
3.indexOf()查找集合中指定位置的元素
4.subList(from,to)截取集合中的元素(根据下标获取)
List实现类
ArrayList:查找元素很快(通过寻址地址和下标查找),但是插入和删除元素不方便(要移动兄弟元素才能插入和删除)。
Iterator迭代,将集合中的元素遍历
Iterator iterator=ArrayList.Iterator();
Iterator api:
1.hasNext() 判断集合中是否有下一个元素
2.Next() 返回该指向的所有元素
Vector:一个早期的List实现类,和ArrayList相似;
Vector的子接口:
Stack:实现了“后进先出”的栈(把最后加入的元素首先取出)。
Stack api:
stack.peek() 把集合中最后加入的元素取出,但不会影响原集合(相当于复制)。
stack.pop()把集合中最后加入的元素取出,但会把原集合中该元素删除。
LinkedList实现“先进先出”队列,链表的形式存储分散的内存空间。
添加和删除元素很方便,但查询较慢。
LinkedList api
add()
push()
offer()以上三个都是添加元素
addFirst()在集合起始位置添加元素
addLast()在集合最后添加元素
list.peek()取出集合第一个元素
list.peekLast()取出集合最后一个元素
list.pop()取出集合第一个元素,删掉原集合中该元素
Queue 队列集合
PriorityQueue 在使用的时候需要注意,添加到该队列中的数据必须有序,即对象具备排序的功能。
Set集合:采用散列的存储方式,可以存储一组无序且唯一的对象。
Set常用的实现类
HashSet
存储一组无序、唯一的对象(无序是指存储和遍历时的顺序是无须的)。
LinkedHashSet
存储一组有序、唯一的元素(这里的有序是指元素的存储顺序和遍历顺序一致)。
LinkedHashSet 判断两个对象是否相等的原理:
先判断两个对象的hashCode值是否相等,hashCode是指将内存地址、属性等一系列信息映射成一个数值,这个数值叫做散列值,这就是该对象的hashCode。
hashCode值即使相等还不能确定是两个对象相等,还需要使用equals方法进行验证,如果返回时true,则是同一个对象。
TreeSet
存储一组有序、唯一的元素(有序是指将集合中的元素自动按照升序排列并输出)。
如果集合中的元素无法排序,则可以让该类继承Comparable接口,并重写compareTo方法