常用方法:
add(Object e):增加元素
remove(Object obj)
addAll(Collection c):两个集合合并
removeAll(Collection c):移除交集
retainAll(Collection c):保留交集
clear():清空集合
isEmpty():判断是否是空
size():返回集合元素的个数。
toArray():将集合对象转换成数组
2:List子接口----线性表
常用的实现类:
ArrayList:
是线性结构内部封装的是动态的数组。长度的增加和减少已经被封装。
可以理解为自动的。
查找快,增删慢
线程不安全,效率高
LinkedList:
是链表结构。一个元素里存了前一个元素的地址和后一个元素的地址。
连到一起很像一链条。
增加删除快,查找慢
Vector: 线程安全,效率低。
List接口提供的方法:
add(int index,Object obj):插入元素
get(int index):获取元素
remove(int index)
indexOf(Object obj):返回元素的下标,返回-1说明没有此元素
lastIndexOf(Object obj):
contains(Object obj):判断是否包含元素obj
3:增强for循环,作用是用来遍历集合或者是数组。
是迭代的另外一种写法,不是新语言。
编译器会将此循环编译成迭代写法。
结构:
for(元素类型 变量名:集合或数组的变量){
}
4:泛型机制。
4.1:泛型机制的本质是参数化类型。在类,接口和方法的
定义过程中,可以进行指定参数类型名。
在集合框架中,所有的集合类型都使用泛型机制。
好处是在进行参数化类型后,就可以限制集合元素
的类型,编译器会通过指定的泛型进行检查。
减少代码在运行时的错误。
public class ArrayList<E>{
………………
public boolean add(E e);
public E get(int index);
………………
}
ArrayList使用泛型机制,E就是类型参数。
在具体使用时,得给E赋值,赋的值是类型名。
List<String> list = new ArrayList<String>();
泛型机制不能使用八大基本数据类型
5:集合的存储:
集合元素都是引用类型。集合对象内存的是元素的地址信息,
不是元素本身。
6:集合工具类:Collections(注意与Collection的区别)
里面提供了常用的方法,其中就有sort(),用来给集合排序。
既然能使用sort对集合进行排序,说明元素之间是可以比较大
小的。 能使用sort进行排序的元素类型必须实现comparable
接口,必须重写接口里的compareTo(Object obj)方法,
这个方法就是用来进行元素之间的比较的 。
this>obj,返回>0的数。
this<obj,返回<0的数
this=obj,返回0
Comparable---compareTo(Object a)
Comparator---compare(Object a,Object b)
7.常用方法
subList(int fromIndex,int toIndex);
作用:是获取集合的子集合。
8.Comparable与Comparator的作用与区别
都是用来排序的:
Comparable是元素类型必须实现的接口。必须重写
compareTo(Object obj)方法。调用sort(p1)方法
return this-obj ---升序
return obj-this ----降序
Comparator是再原有排序规则上,临时改变排序规则时,
使用的比较器接口。必须实现compare(Object o1,Object o2),
临时改变规则时,调用集合的sort(p1,p2)方法
return p1-p2 ----升序
return p2-p1 ----降序
9.队列Queue:
是一个接口,数据结构是只能一端进,一端出(FIFO).
LinkedList就实现了此接口(为什么不用ArrayList
实现此接口呢?因为队列这种数据结构经常发生增删操作,
LinkedList在增删效率上特别快)。
常用方法:
offer(E e):表示进入队列
poll():表示从队首出队列,返回的就是出来的元素
peek():查看队首元素,返回的就是队首元素
10.双端队列Deque接口,是队列Queue的子接口。
每一端都可进可出。
11.双端队列把一端封闭(不使用),只用另一端来进行增删元素。
就是栈的数据结构了(FILO)
使用push(E e):