JAVA集合框架(精校版本)
Java学习资料集(8):Java 集合框架

Java集合类的整体框架如下:从上图中可以看出,集合类主要分为两⼤大类:Collection和Map。
Collection是List、Set等集合⾼高度抽象出来的接⼝口,它包含了了这些集合的基本操作,它主要⼜又分Set接⼝口通常表示⼀一个集合,其中的元素不不允许重复(通过hashcode和equals函数保证),常⽤用实现类有HashSet和TreeSet,HashSet是通过Map中的HashMap实现的,⽽而TreeSet是通过Map 中的TreeMap实现的。
另外,TreeSet还实现了了SortedSet接⼝口,因此是有序的集合(集合中的元素要实现Comparable接⼝口,并覆写Compartor函数才⾏行行)。
我们看到,抽象类AbstractCollection、AbstractList和AbstractSet分别实现了了Collection、List和Set接⼝口,这就是在Java集合框架中⽤用的很多的适配器器设计模式,⽤用这些抽象类去实现接⼝口,在抽象类中实现接⼝口中的若⼲干或全部⽅方法,这样下⾯面的⼀一些类只需直接继承该抽象类,并实现⾃自⼰己需要的⽅方法即可,⽽而不不⽤用实现接⼝口中的全部抽象⽅方法。
Map是⼀一个映射接⼝口,其中的每个元素都是⼀一个key-value键值对,同样抽象类AbstractMap通过适配器器模式实现了了Map接⼝口中的⼤大部分函数,TreeMap、HashMap、WeakHashMap等实现类都通过继承AbstractMap来实现,另外,不不常⽤用的HashTable直接实现了了Map接⼝口,它和Vector都是JDK1.0就引⼊入的集合类。
Iterator是遍历集合的迭代器器(不不能遍历Map,只⽤用来遍历Collection),Collection的实现类都实现了了iterator()函数,它返回⼀一个Iterator对象,⽤用来遍历集合,ListIterator则专⻔门⽤用来遍历List。
第一部分Java集合框架

举例:
IteratorExample.java
boolean hasNext() 判断是否存在另一个可访问的 元素。 Object next() 返回要访问的下一个元素。如 果到达集合结尾,则引发 NoSuchElementException异 NoSuchElementException异 常。当使用next方法遍历元素 常。当使用next方法遍历元素 时,如果需要,可以接着使用 remove方法删除刚返回的元素。 remove方法删除刚返回的元素。 next和hasNext方法是一种健 next和hasNext方法是一种健 全的设计,能够以任何顺序调 用它。它们是相对独立的,可 以多次调用hasNext方法而不 以多次调用hasNext方法而不 一定非要移到下一个元素时再 调用,并且会返回正确的答案。 void remove() 删除上次访问返回的对象。本 方法必须紧跟在一个元素的访 问后执行。如果上次访问后集 合已被修改,方法将引发 IllegalStateException异常。 IllegalStateException异常。
Collection转换为Object数组 Collection转换为Object数组
Object[] toArray() 返回一个内含集合所有元素的Object类型 返回一个内含集合所有元素的Object类型 数组。 <T> T[] toArray(T[] a) 返回一个内含集合所有元素的T 返回一个内含集合所有元素的T类型数组。 运行期返回的数组和参数a 运行期返回的数组和参数a的类型相同,但 使用时需要进行转换。
迭代器Iterator 迭代器Iterator
Iterator接口方法能以迭代方式 Iterator接口方法能以迭代方式 逐个访问集合中各个元素,并安 全的从Collection中除去适当的 全的从Collection中除去适当的 元素。 package java.util; public interface Iterator { boolean hasNext(); Object next(); void remove(); }
Java集合框架

Java集合框架汇总1.集合框架结构图 (1)2.两种特殊的Java容器类List和Set分析 (2)3. Collection 接口: (2)4.Iterator 接口: (3)5.List接口: (3)5.1 LinkedList类: (5)5.2 ArrayList类: (5)6.Set接口: (5)7.Map接口: (6)8.Comparable接口和Comparator接口: (7)9. 集合框架面试题 (7)1.集合框架结构图集合接口说明:Collection 接口是一组允许重复的对象。
List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。
Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。
Map接口是一组成对的键-值对象,即所持有的是key-value pairs。
Map中不能有重复的key。
拥有自己的内部排列机制。
容器中的元素类型都为Object。
从容器取得元素时,必须把它转换成原来的类型。
2.两种特殊的Java容器类List和Set分析容器类可以大大提高编程效率和编程能力,在Java2中,所有的容器都由SUN公司的Joshua Bloch进行了重新设计,丰富了容器类库的功能。
Java2容器类类库的用途是“保存对象”,它分为两类:------Collection||---------------List(可以重复)|----------------Set(不能重复)------Map(键值对)Collection---- 一组独立的元素,通常这些元素都服从某种规则。
List必须保持元素特定的顺序,而Set不能有重复元素。
Map---- 一组成对的“键值对”对象,即其元素是成对的对象,最典型的应用就是数据字典,并且还有其它广泛的应用。
另外,Map可以返回其所有键组成的Set和其所有值组成的Collection,或其键值对组成的Set,并且还可以像数组一样扩展多维Map,只要让Map中键值对的每个“值”是一个Map即可。
集合框架

Collection Map
List
Set
ArrayList
LinkedList
HashSet
TreeSet
HashMap
TreeMap
2
具体类
提供了对集合进行排序、 遍历等多种算法实现 Collections
3 算法
Java集合框架为我们提供了一套性能优良、使用方便的接口和类,它们 位于java.util包中 我们不必再重新发明轮子,只需学会如何使用它们,就可处理实际应用中 问题
18
}
}
Map接口3-3
• Map接口常用方法
方法名
Object put(Object key, Object val)
说
明
以“键-值对”的方式进行存储
Object get (Object key)
Object remove (Object key) int size()
根据键返回相关联的值,如果不存在 指定的键,返回null
Object get(int index)
boolean contains(Object o) boolean remove(Object o) Object remove(int index)
从列表中删除指定位置元素,起始索引位置从0 开始
11
练习——添加多个企鹅信息到List中
•
需求说明: – 把多个企鹅的信息添加到集合中 – 查看企鹅的数量 – 遍历所有企鹅的信息 – 删除集合中部分企鹅的元素 – 判断集合中是否包含指定企鹅
21
迭代器Iterator2-2
public class Test5 { public static void main(String[] args) { // 1、创建多个狗狗对象 Dog ououDog = new Dog("欧欧", "雪娜瑞"); … // 2、创建ArrayList集合对象并把多个狗狗对象放入其中 List dogs = new ArrayList (); dogs.add(ououDog); 通过迭代器依次输出所 … 有狗狗的信息 System.out.println("使用Iterator遍历,所有狗狗昵称和品种是:"); Iterator it = dogs.iterator(); while (it.hasNext()) { Dog dog = (Dog) it.next(); System.out.println(dog.getName()+"\t"+dog.getStrain()); } } }
Java集合框架

JAVA集合框架概要
5
有条件的线程安全性
在Java1中容器类库是同步化的,而Java2中的容器类库都是非同步化,它通过 提供一个不同步的基类和一个同步的包装器(如对于Map有 Collections.synchronizedMap),解决了线程安全性问题。 通过将基本的
6
功能从线程安全性中分离开来,允许需要同步的用户可以拥有同步,而不需
成绩表
List { Map{ 学号:54 , 姓名:韦XX , 语文:121 , 数学:95 , … 总分 : 806 , 排名 : 1 }, Map{ 学号:60 , 姓名:黄XX , 语文:124 , 数学:119 , … 总分 : 724 , 排名 : 2 }, …
17
}
微博(个人资料,关注,粉丝)
18
Map{ 李开复 : Map{ 昵称 : 李开复 , 所在地 : 北京东城区 , 性别 : 男 , 生日 : 1961年12月3日 , 博客 : ttp:///kaifulee , 个性域名 : /kaifulee , 简介 : 创新工场CEO , 注册时间 : 2009-08-28 关注 : List{ 姓名A , 姓名B , … }, 粉丝 : List{ 粉丝A , 粉丝B , …} } }
调整
个人 相差
执行 获悉 1日
2016年
7月 24日
Set {最低 , 时间 , 政策 , 单位 , 调整 , 执行 , 2016年 , 最高 , 上下限 , 济南 , 公积金 , 个人 , 获悉 , 7月 , 年度 , 记者 , 缴存额 , 住房 , 相差 , 1日 , 24日}
一篇文档中所有句子先后排列
济南公积金单位和个人月缴存额最高为5074.32元 , 最低为155元 , 上下限相差近33倍 , 此次 政策的执行时间为2016年7月1日至2017年6月30日}
Java基础系列集合框架精品PPT课件

--集合框架
一、概述
集合是一个将多个元素组合进单一单元或容器的对象,用于存储、获取和操作数据以 及将数据从一个方法传递到另一个方法。
一个集合是 代表那些组成一个自然的组的数据项 允许你将一个组看成是抽象的 用于存储、获取和操作数据,以及将一个数据从一个方法传递到另一个方法
高性能--基础集合的实现是高效率的,很少需要采用手动的方 式对这些“数据 引擎”进行编码。
减少编程工作量 – 精力集中于程序的重要部分
集合类型之间的通用API,使不同类型的集合以相似的方式进行操作,并有很高的互
用性。
容易扩展和改变一个集合。
提供了将标准数据集成到集合框架中的机制。
3、集合和映射
Collection转换为Object数组 : Object[] toArray() :返回一个内含集合所有元素的array Object[] toArray(Object[] a) :返回一个内含集合所有元素的array。运行 期返回的array和参数a的型别相同,需要转换为正确型别。 此外,还可以把集合转换成其它任何其它的对象数组。但是,不能直 接把集合转换成基本数据类型的数组,因为集合必须持有对象。
2、集合接口--List接口
重要方法:
面向位置的操作,包括插入某个元素或 Collection 的功能,还包括获取、除去或更 改元素的功能。在 List 中搜索元素可以从列表的头部或尾部开始,如果找到元素 ,还将报告元素所在的位置 : void add(int index, Object element): 在指定位置index上添加元素element boolean addAll(int index, Collection c): 将集合c的所有元素添加到指定位置index Object get(int index): 返回List中指定位置的元素 int indexOf(Object o): 返回第一个出现元素o的位置,否则返回-1 int lastIndexOf(Object o) :返回最后一个出现元素o的位置,否则返回-1 Object remove(int index) :删除指定位置上的元素 Object set(int index, Object element) :用元素element取代位置index上的元素,并 且返回旧的元素
JAVA 集合框架

集合框架1. JAVA 集合框架的组成三部分: 接口,接口的实现类,算法类(工具类)接口如:Collection,List,Map实现类:ArrayList,LinkedList,HashMap等算法类:Collections,Arrays如上图所示接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。
可扩展为自定义集合类。
实现类:8个实现类(实线表示),对接口的具体实现。
左下角即为算法类.在JAVA 集合中又主要分为这三种类型Set和List集合接口(两者同属 Collection 接口下的 )和Map接口Set(集) 接口类型:集合中的对象没有特定的方式排序,没有重复对象,但它的某些实现类能对集合中的对象按特定方式排序。
List(列表) 接口类型:是有序的Collection,集合中的对象按照索引位置排序,可以有重复对象,可以按对象在集合中的索引位置检索对象,与数组类似。
Map(映射) 接口类型:集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复。
它的有些实现类能够对集合中的键对象进行排序。
有趣的是Collection接口不提供随机访问元素的get()方法。
因为Collection 包括Set,而Set自己维护内部顺序。
如果想检查Collection中的元素,那就必须使用迭代器。
而List接口中则出现了 get(int index)方法,其实现类 ArrayList和LinkedList也就实现了这个方法。
另外 Collection 接口的iterator() 和 toArray()方法都用于获得集合中的所有元素,前者返回一个Iterator对象,后者返回一个包含集合中所有元素的数组.Iterator接口隐藏底层集合的数据结构,向客户程序提供了遍历各种类型的集合的统一接口。
hasNext()判断是否遍历完毕,next()返回下一个元素等等。
JAVA中的集合框架

list.add(2,“c”);// 将对象c添加到索引位置为2的位置
Iterator<String> it = list.iterator(); while (it.hasNext()) { System.out.print(it.next()); } } 在控制台将输出如下信息: A B C D
ArrayList集合类
ArrayList集合类
•List接口常用方法
方法名
boolean add(Object o) void add(int index,Object o) int size() Object get(int index) boolean contains(Object o) boolean remove(Object o)
Object remove(int index)
LinkedList集合类
public static void main(String[] args) { List<String> list = new LinkedList<String>(); list.add(“a”); list.add(“e”); list.add(“d”); list.set(1,“b”);// 将索引位置为1的对象e修改为对象b
说
明
在列表的末尾顺序添加元素,起始索引位置 从0开始 在指定的索引位置添加元素。索引位置必须 介于0和列表中元素个数之间 返回列表中的元素个数 返回指定索引位置处的元素。取出的元素是 Object类型,使用前需要进行强制类型转换 判断列表中是否存在指定元素 从列表中删除元素 从列表中删除指定位置元素,起始索引位置 从0开始
Object getFirst() Object getLast() Object removeFirst() Object removeLast()
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
集合框架
➢Java平台提供了一个全新的集合框架。
“集合框架”主要由一组用来操作对象的接口组成。
不同接口描述一组不同数据类型。
它们都封装在java.util包中
核心接口
➢Java集合框架的核心接口有两种:Collection(聚集)和Map(映射)
➢Collection 接口是一组允许重复的对象。
➢Set 中的数据对象没有顺序且不可以重复。
接口
➢List中的数据对象有顺序且可以重复。
接口
➢Map接口是一组成对的键-值对象,即所持有的是key-value pairs。
Map中不能有重复的key。
拥有自己的内部排列机制。
不能有重复的键
Collection
➢类java.util.Collections 提供了一些静态方法实现了基于List容器的一些常用算法➢void sort(List l) 对List容器内的元素排序
➢void shuffle(List l) 对List容器内的对象进行随机排列
➢void reverse(List l) 对List容器内的对象进行逆续排列
➢void fill(List l, Object o)
➢用一个特定的对象重写整个List容器
➢void copy(List dest,List src)
➢将src List容器内容拷贝到dest List容器
➢int binarySearch(List l, Object o)
➢对于顺序的List容器,采用折半查找的方法查找特定对象
例题:
List l1 = new LinkedList();
List l2 = new LinkedList();
for(int i=0; i<=9; i++) { l1.add("a"+i); }
System.out.println(l1);
Collections.shuffle(l1); //随机排列
System.out.println(l1);
Collections.reverse(l1); //逆续
System.out.println(l1);
Collections.sort(l1); //排序
System.out.println(l1);
System.out.println(Collections.binarySearch(l1,“a5”)); //折半查找List
➢List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复
➢List 容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
➢List 接口中所定义的方法:
➢Object get(int index);
➢Object set(int index, Object element);
➢void add(int index, Object element);
➢Object remove(int index);
➢int indexOf(Object o);
➢int lastIndexOf(Object o); ————————————————————————————————————————————————————————————————————————————————————————————————————————————
List接口的实体类——LinkList类
➢第一步,确定存储方式。