集合(容器): 包含的都是接口:
Collection接口:存储一组不唯一,无序的对象。
List接口:存储一组不唯一,有序(插入顺序)的对象。
Set接口:存储一组唯一,无序的对象。
Map接口:存储一组键值对,提供key-value的映射。
集合作为容器具有增、删、改、查的功能。
增:add();添加,存储对象。 size();容器中元素的实际个数。
remove(); clear();removeAll(Collection<> c);retainsAll(Object obj); 删除
contains(Object obj);isEmpty();判断元素 iterator();遍历元素
对于集合的遍历(三种方法):for循环遍历,foreach遍历,迭代器遍历。(hastnext();下一个,next()本身)。
ArrayList:实现了了长度可变的数组。
-优点:遍历元素和随机访问的效率比较高。
-缺点:添加和删除元素需要大量移动元素,效率低,按照内容查询效率低。
LinkedList :采用链表存储方式。
-优点:插入、删除元素时效率比较高。
-缺点:遍历和随机访问元素效率低。
特有的方法:offerFirst(); offerLast(); 添加头/尾。
PollFirst(); pollLast(); 删除头/尾。
peekFrist(); peekLast(); 获取头/尾
Set接口:
Set接口存储一组唯一,无序的对象(存入和取出的顺序不一定一致),操作数据的方法与List类似,但是set接口中不存在get方法。
HashSet:采用Hsahtable哈希表存储结构。
-优点:添加速度快,查询速度快,删除速度快。
-缺点:无序。
-LinkedHashSet: 采用哈希表存储结构,同时使用链表维护次序,有序(添加顺序)。
TreeSet:采用二叉树(红黑树)的存储结构。
-优点:有序(排序后的升序)查询速度比List快(按照内容查询)。
-缺点:查询速度没有HashSet快。
Set集合因为是唯一的,所以会剔除重复元素,如果是引用数据类型需要重写hashcode和equals方法。
TreeSet集合要求你提供排序规则,因此需要实现比较接口Comparable的ComparaTo方法。
Set相对于List没有下标,所以没有get()方法,不能使用普通的for循环取值。(foreach和iterator)。
<泛型>:不特指哪一种类型,你定义什么类型就是什么类型。
package cn.bjsxt.demo; public class Point2<T> {//此处可以随便写标识符号,T是type的简称,也可以写a,b,c private T var;//var的类型由T指写,由外部指定 public T getVar() {//返回值的类型由外部指定 return var; } public void setVar(T var) {//参数的类型由外部指定 this.var = var; }
Map接口:
HashMap:Key无序,唯一,value无序,不唯一。
LinkedHashMap:有序的HashMap速度快。
TreeMap:有序,速度没有hash块。
添加:put() 删除:clear(); remove()
判断: containsKey(); 判断key是否存在。 ContainsValue(); 判断value是否存在。
遍历:get(key); values(); 返回一个集合包括所有value值。
Keyset();返回所有key值。Entryset();返回包括映射的关系图。
Collections和Collection不同,前者是集合的操作类,后者是集合的接口。
Collections提供的静态方法:
AddAll(); 批量添加 sort();排序 binarySearch();二分法查找 fill();替换
shuffle(); 随机排序 reverse();倒序排序。