目录
- 集合的引入
- List (ArrayList LinkedList)
- Set (HashSet LinkedHashSet TreeSet )
- Map (HashMap LinkedHashMap TreeMap)
- Iterator
- 使用泛型
- Collections
- 集合总结
1.集合的引入
集合的使用场合—Where
• 举例
• 新闻列表
• 就业喜报
• 就业明星
• 邮件列表
• 购物车
当我们需要将一些相同结构的个体整合在一起时,就可以考虑使用集合了 。
1.1集合框架
- Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中
- 存放在集合中的数据,被称为元素(element)
集合框架图详解:
**集合架构 **
• Collection 接口存储一组不唯一,无序的对象
• List 接口存储一组不唯一,有序(索引顺序)的对象
• Set 接口存储一组唯一,无序的对象
• Map接口存储一组键值对象,提供key到value的映射
• Key 唯一 无序 • value 不唯一 无序
2.List
2.List
• 特点:有序 不唯一(可重复)
• ArrayList 线性表中的顺序表
• 在内存中分配连续的空间,实现了长度可变的数组
• 优点:遍历元素和随机访问元素的效率比较高
• 缺点:添加和删除需大量移动元素效率低,按照内容查询效率低。
• LinkedList 线性表中双向链表
• 采用双向链表存储方式。
• 缺点:遍历和随机访问元素效率低下
• 优点:插入、删除元素效率比较高(但是前提也是必须先低效率查询才可, 如果插入删除发 生在头尾可以减少查询次数)
2.List
• List常用方法
• List相对Collection增加了关于位置操作的方法
• List的遍历方法
• for
• for-each
• Iterator迭代器
• 理解面向接口编程
• List list = new ArrayList();
• ArrayList list = new ArrayList();
• 集合中内容是否相同
• 通过equals进行内容比较,而是==引用比较
3.Set
• 特点:无序 唯一(不重复)
• HashSet
• 采用Hashtable哈希表存储结构(神奇的结构)
• 优点:添加速度快 查询速度快 删除速度快
• 缺点:无序
• LinkedHashSet
• 采用哈希表存储结构,同时使用链表维护次序
• 有序(添加顺序)
• TreeSet
• 采用二叉树(红黑树)的存储结构
• 优点:有序 查询速度比List快(按照内容查询)
• 缺点:查询速度没有HashSet快
• Set常用方法
• Set相对Collection没有增加任何方法
• Set的遍历方法
• for-each
• Iterator迭代器
• 无法使用for进行遍历(因为无序,所以没有get(i))
• HashSet、HashMap或Hashtable中对象唯一性判断
• 重写其hashCode()和equals()方法
• TreeSet中指明排序依据
• 实现Comparable接口
• 创建实现Compator接口的类。
4.Map
• Map
• 特点 key-value映射
• HashMap
• Key无序 唯一 (Set)
• Value 无序 不唯一 (Collection)
• LinkedHashMap
• 有序的HashMap 速度快
• TreeMap
• 有序 速度没有hash快
5.Iterator
• 所有集合类均未提供相应的遍历方法,而是把把遍历交给迭代器完成。迭代器为集 合而生,专门实现集合遍历
• Iterator是迭代器设计模式的具体实现
• Iterator方法
• boolean hasNext(): 判断是否存在另一个可访问的元素
• Object next(): 返回要访问的下一个元素
• void remove(): 删除上次访问返回的对象。
• 问题:可以使用Iterator遍历的本质是什么
• 实现Iterable接口
6.使用泛型
• 起因:
• JDK1.4以前类型不明确:
• 装入集合的类型都被当作Object对待,从而失去自己的实际类型。
• 从集合中取出时往往需要转型,效率低,容易产生错误。
• 解决办法:
• 泛型,在定义集合的时候同时定义集合中对象的类型
• 好处:
• 增强程序的可读性和安全性
7.Collections
• 专门用来操作集合的工具类
• 构造方法私有,禁止创建对象
• 提供一系列静态方法实现对各种集合的操作
• 具体操作:搜索、复制、排序、线程安全化等
• 常用方法
• Collections.addAll(list, "aaa","bbb","ccc","ccc");
• int index = Collections.binarySearch(list, "ccc");
• Collections.copy(list2, list); • Collections.fill(list3, "888");
• String max = Collections.max(list4);
• String min = Collections.min(list4);
• Collections.reverse(list4);
• List list5 = Collections.synchronizedList(list4);