集合框架

 
框架:为了实现某一种特定功能而预先设计好的,一系列具有继承或实现关系的类与接口,操作时可以直接从高层进行开发而不必关注底层的实现。
 
java集合框架简称为:JCF
J:java
C:collections
F:frame
 
 
1、集合:Collection整个集合框架的核心接口(集合根接口):直接衍生List,Set,间接衍生Map(组合Collection)
2、工具类:Collections Arrays
3、比较器:Comparable Comparator
 
目标:增删查改,以及遍历(关键)
List:列表
特点:线性--以有序的方式存放数据(链表就是),最大
特点(有下标);
掌握:ArrayList、LinkedList
方法:
---.add();
---.size();
---.remove("下标/具体某元素(只会删除以一个)");
---.get();查询----默认返回的是Object,所以需要强转
---.set();根据下标改
遍历:
---普通for循环
---for-each循环(JDK1.5以后的功能,就用迭代器)
for(Object obj : obj){
 
---迭代器(JDK1.5以后很少用)(可能维护老代码,可能会用到)
---以前专用与没有下标的集合类完成遍历,现在被for-each替代
---可以理解为零时的盒子,理解为将lis中的数据全部放进去,
---Iterator it = lis.interator();
---it.hasNext();//判断有没有下一个,有true
---it.next();//取
区别掌握:
1、ArrayList采用的是数组的方式进行存储
2、Linkedlist采用的是链表的方式进行储存:而且是双向链表
这种区别造成了使用场景的差异:查询(ArrayList快)快增删(中间Linkedlist快)(末尾ArrayList快)
1、ArrayList:适用于做大量的查询工作,或往尾部增加和删除数据
2、Linkedlist:适用于做大量的往中间添加和删除数据
辨析:ArrayList、LinkedList、Vector
1、Vector也是List的分支,是ArrayList的兄弟类,底层实现也是数组
2、不同:Vector是线程安全的(线程同步),效率低
LinkedList:实现接口
1、queue:队列
---通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素
方法:
---offer(E e); 指定元素插入队尾(为什么不用add();当达到容器装满之后会抛异常)
---peek(); 获取队头元素,不移除;队列为空返回null
---poll(); 获取队头元素,并且移除;队列为空返回null
---remove(); 同上poll();但是为null时会抛异常
---element(); 获取但不移除对头,null抛异常
2、qeque:
Set:
特点:集--,不能存放重复元素,非线性,即无序,没有下标(是按照哈希值顺序放的)
掌握:HashSet
---1、提供了增加删除的行为(只能按照对象删除)
---2、没有修改指定和查询的行为(因为没有下标)
---3、不解释普通for循环
方法:
---.add();//增(不能放重复元素 )
---.size();//获取长度
---.remove( Object);//没有下标所以只能根据对象进行删除
---没有改的方法
---没有查询获取某个指定元素的方法
遍历:
---for-each
---迭代器
判断:Set集合如何判断两个元素重复
---不是判断两个元素是否是同一对象
---而是:先调用两个对象的hashcode方法,判断是否返回同一个值;
然后调用,equals方法判断是否放回true;
所以根据规范,重写equals同时也要重写hashcode方法
Map:映射
特点:key-value(键值对):无序,key不重复,value可以重复,无下标;
掌握:hashMap
补充掌握:Properties操作文件的方法
辨析:
HashMap、Hashtable
1、两个都是Map分支的实现类,拥有相同的API
2、不同:
---HashMap是线程不安全的,线程不同步,效率高;
---Hashtable是线程安全的,同步的,效率低;
---HashMap可以用空做键key=null,也可用空来做值value=null;Hashtable不允许;
 
HashMap: ---HashMap<String, Student> map = new HsahMap<String, Student>();
方法:
---.put(key, value); 改,如果key不存在,则增加-必须保证键不一样;
---.remove(key, value);删除,key不存在只会失败,不会异常,返回删除的value
---.size();获取元素个数
---.get(key);获取(查),如果没有(null)
遍历:
---不能直接遍历Map,只能单独遍历所以的键或者所有的
---在遍历之前先获取所有的键值(key)和所有的值(value);
---键值(key):Set<E> keys = map.keySet();
---值(value)Collection<E> value = map.value();
---然后用for-each或者迭代器遍历;
 
如何遍历键值对:
Set<Entry<String, Integer>> entrySet = map.entrySet();
for (Entry<String, Integer> entry : entrySet) {
System.out.println(entry);
}
泛型:
框架的类在默认情况下是可以操作任意数据类型的(Object),这本来是集合要解决的数组三大问题之一。但是在实际场景中,我们往往是把同一数据类型放在一起做同一处理。
 
作用:
---用来限制某个集合对象只能存放某种类型的元素。
 
 
Collections:集合工具类
方法:
---Collections.min(list);最小
---Collections.max(list);最大
---Collections.sort(list);排序,自然排序(及元素类型自带的内部比较规则)(默认内部比较器Comparator
---Collections.sort(list, Co);//调用外部比较器
---Collections.shuffle(lst);//混排---随机顺序
 
Comparable<E>
内部比较器:写在元素类型的身上
重写compareTo
---当当前对象根据排序对象所决定的位置 小于 指定对象根据规则所决定的位置 ,返回-1
---当当前对象根据排序对象所决定的位置 大于 指定对象根据规则所决定的位置 ,返回1
---当当前对象根据排序对象所决定的位置 等于 指定对象根据规则所决定的位置 ,返回0
 
Comparator
定义一个实现Comparator<E>的类
---写一个比较方法
排序调用Collections.sort(List对象,外部比较器);
当传入外部比较器进行排序时,就是List中的元素有内部的比较器,也以外部为准;
---第一个对象根据排序对象所决定的位置 小于 第二个对象根据规则所决定的位置 ,返回-1
---第一个对象根据排序对象所决定的位置 大于 第二个对象根据规则所决定的位置 ,返回1
---第一个对象根据排序对象所决定的位置 等于 第二个对象根据规则所决定的位置 ,返回0
 
如何区别使用:
---把最常用的排序写到内部(自然排序)
---较少使用的写到外部比较器中

posted on 2017-02-22 21:49  侯熙  阅读(163)  评论(0编辑  收藏  举报