第十一章--集合框架 2
集合知识框架
内容 基本要求集合的含义 会使用符号“∈”或“∉”表示元素与集合之间的关系;集合的表示能选择自然语言、图形语言、集合语言描述不同的具体问题; 理解集合的特征性质,会用集合的特征性质描述一些集合,如常用数集,方程或不等式的解集等 集合间的基本关系理解集合之间包含与相等的含义,及子集的概念.在具体情景中,了解空集和全集的含义;理解两个集合的交集和并集的含义,会求两个简单集合的交集与并集.理解在给定集合中一个子集的补集的含义,会求给定子集的补集集合的基本运算 掌握有关的术语和符号,会用它们表达集合之间的关系和运算.能使用维恩图表达集合之间的关系和运算.1.集合:某些指定的对象集在一起成为集合。
(1)集合中的对象称元素,若a 是集合A 的元素,记作A a ∈;若b 不是集合A 的元素,知识内容高考要求模块框架集合记作A b ∉;(2)集合中的元素必须满足:确定性、互异性与无序性;确定性:设A 是一个给定的集合,x 是某一个具体对象,则或者是A 的元素,或者不是A 的元素,两种情况必有一种且只有一种成立;互异性:一个给定集合中的元素,指属于这个集合的互不相同的个体(对象),因此,同一集合中不应重复出现同一元素;无序性:集合中不同的元素之间没有地位差异,集合不同于元素的排列顺序无关; (3)表示一个集合可用列举法、描述法或图示法;列举法:把集合中的元素一一列举出来,写在大括号内;例如:{1,2,3,4,5},{1,2,3,4,5,}描述法:把集合中的元素的公共属性描述出来,写在大括号{}内。
例如:大于3的所有整数表示为:{Z |3}x x ∈>方程2250x x --=的所有实数根表示为:{R x ∈|2250x x --=}具体方法:在大括号内先写上表示这个集合元素的一般符号及取值(或变化)范围,再画一条竖线,在竖线后写出这个集合中元素所具有的共同特征。
注意:列举法与描述法各有优点,应该根据具体问题确定采用哪种表示法,要注意,一般集合中元素较多或有无限个元素时,不宜采用列举法。
《Java程序设计课件之集合框架》
4. 删除元素:list.rem o ve(0);
Set集合的使用方法
1. 创建Set对象:Set<String > set= new HashSet< >();
2. 添加元素:set.add("Elem ent 1");
3. 判断元素是否存在:bo olean c o ntains = set.c o ntains("Elem ent 1");
集合框架中的线程安全问题
Java集合框架中的大多数类都不是线程安全的,多个线程同时访问同一个集
合可能导致数据的不一致性和错误。
集合框架的性能分析
1
时间复杂度
2
空间复杂度
不同集合类型的操作耗时不同,需要根据
集合框架的空间占用取决于存储的元素数
具体需求选择合适的集合。
量和类型。
集合框架的源码分析
通过分析集合框架的源码,可以深入理解集合的实现原理和内部机制。
《Java程序设计课件之集
合框架》
Java程序设计课件之集合框架大纲:探索Java集合框架的宝藏,从基本概念
到实际应用,让您成为集合框架的专家。
什么是集合框架
集合框架是Java中用于存储、操作和访问数据的一种机制。它提供了一组类
和接口,让开发人员能够高效地处理数据集合。
集合框架的作用
1
提高效率
2
代码重用 ♻️
集合框架提供了各种数据结
通过使用集合框架,开发人
构和算法,能够帮助开发人
员可以复用通用的数据结构
员轻松高效地处理大量数据。
和算法,节省开发时间和代
10_集合框架2
private int totalCount; //购物车所有商品数量 private Map<Integer,OrderItemBean> itemMap; //商品 编号与订单项的键值对
public ShoppingCar(){ //初始化购物车
} public void buy(int nid){
private Map<Integer, McBean> data = new HashMap<Integer, McBean>();
public Database(){ McBean bean = new McBean(); bean.setNid(1); bean.setSname("地瓜"); bean.setNprice(2.0); bean.setSdescription("新鲜的地瓜");
} public void update(int nid, int count){ ///通过商品编号找到对应的对应的定单项,修改商 品数量。然后从更新购物车的总价格和总数量。
} public void clear(){ //清空定单项,购物车的总价格和总数量清零。 }
public void show(){
集合框架2课后作业
1、 简答题 1. Map和List有没有共同点? 陈述:
2. HashMap和Hashtable有和区别? 陈述:
2、 上机題: 对应编
号
详细要求
1
函数y=x*x(x是整形,0=<x<=100)。请把x,y的值保存到 map。根据给定的x,从map中得到对应的y值。
此题模仿购物车。 1) 编写商品类McBean,该类包含商品编号,名称,价
掌握Java中的集合框架
掌握Java中的集合框架Java是一种功能强大的编程语言,拥有丰富的类库和工具,其中集合框架是Java编程中非常重要的一部分。
掌握Java中的集合框架,对于开发高效、可维护的应用程序至关重要。
本文将介绍Java中的集合框架,包括集合的种类、常用操作以及最佳实践。
一、集合框架概述集合框架是Java提供的一组接口、类和算法的集合,用于存储和操作一组对象。
Java的集合框架包含了各种不同类型的集合,例如List、Set、Map等。
这些集合框架提供了不同的数据结构和操作方式,以满足不同的需求。
1. ListList是有序、可重复的集合,可以通过索引访问其中的元素。
常用的List实现类有ArrayList和LinkedList。
ArrayList基于数组实现,在随机访问时具有较好的性能;LinkedList基于链表实现,在插入和删除元素时具有较好的性能。
2. SetSet是无序、不可重复的集合,常用于存储一组唯一的元素。
常见的Set实现类有HashSet和TreeSet。
HashSet基于哈希表实现,具有较好的插入、删除和查找性能;TreeSet基于红黑树实现,保持元素有序。
3. MapMap是一种键值对的映射集合,每个键对应一个值。
常用的Map实现类有HashMap和TreeMap。
HashMap基于哈希表实现,具有较好的插入、删除和查找性能;TreeMap基于红黑树实现,保持键有序。
二、集合框架的使用Java中的集合框架提供了丰富的操作方法,以方便对集合进行增删改查等操作。
下面介绍一些常用的操作方法:1. 添加元素对于List和Set集合,可以使用add方法向集合中添加元素。
例如:```List<String> list = new ArrayList<>();list.add("Java");list.add("Python");Set<String> set = new HashSet<>();set.add("Apple");set.add("Banana");```2. 删除元素可以使用remove方法从集合中删除指定元素。
集合框架(非常详细)
集合框架(⾮常详细)⽹上搜集合框架,感觉这篇写的⾮常好。
java的集合框架最全详解(图)前⾔:数据结构对程序设计有着深远的影响,在⾯向过程的C语⾔中,数据库结构⽤struct来描述,⽽在⾯向对象的编程中,数据结构是⽤类来描述的,并且包含有对该数据结构操作的⽅法。
在Java语⾔中,Java语⾔的设计者对常⽤的数据结构和算法做了⼀些规范(接⼝)和实现(具体实现接⼝的类)。
所有抽象出来的数据结构和操作(算法)统称为Java集合框架(JavaCollectionFramework)。
Java程序员在具体应⽤时,不必考虑数据结构和算法实现细节,只需要⽤这些类创建出来⼀些对象,然后直接应⽤就可以了,这样就⼤⼤提⾼了编程效率。
1. 先说Set和List:1.1. Set⼦接⼝:⽆序,不允许重复。
List⼦接⼝:有序,可以有重复元素。
具体区别是Set:检索元素效率低下,删除和插⼊效率⾼,插⼊和删除不会引起元素位置改变。
<对应类有 HashSet,TreeSet>List:和数组类似,List可以动态增长,查找元素效率⾼,插⼊删除元素效率低,因为会引起其他元素位置改变。
<相应类有ArrayList,LinkedList,Vector>Set和List具体⼦类:2.2. <实例⽐较>HashSet:以哈希表的形式存放元素,插⼊删除速度很快。
ArrayList:动态数组,LinkedList:链表、队列、堆栈。
Vector是⼀种⽼的动态数组,是线程同步的,效率很低,⼀般不赞成使⽤1.Collection接⼝Collection是最基本的集合接⼝,⼀个Collection代表⼀组Object,即Collection的元素(Elements)。
⼀些 Collection允许相同的元素⽽另⼀些不⾏。
⼀些能排序⽽另⼀些不⾏。
JavaSDK不提供直接继承⾃Collection的类,JavaSDK提供的类都是继承⾃Collection的“⼦接⼝”如List和Set。
高三数学集合知识点框架
高三数学集合知识点框架在高三数学中,集合是一个重要且常见的概念。
掌握集合的相关知识点对于理解和解决数学问题至关重要。
下面将给出高三数学集合知识点的框架。
一、集合的定义和表示方法1. 集合的定义:集合是由一些确定的对象组成的整体。
2. 集合的表示方法:列举法和描述法。
二、集合的运算与关系1. 交集:集合A和集合B的交集,记作A∩B,表示同时属于A和B的元素组成的集合。
2. 并集:集合A和集合B的并集,记作A∪B,表示属于A或B的元素组成的集合。
3. 差集:集合A和集合B的差集,记作A-B或A\B,表示属于A但不属于B的元素组成的集合。
4. 补集:集合A相对于全集U的补集,记作A',表示全集U 中不属于A的元素组成的集合。
5. 相等关系:若两个集合A和B的元素完全相同,则称集合A 和集合B相等,记作A=B。
三、集合的性质1. 子集关系:若集合A中的每个元素都是集合B的元素,则称A是B的子集,记作A⊆B。
2. 空集和全集:空集是不包含任何元素的集合,全集是所讨论的集合中的所有元素的总和。
3. 互斥集:若两个集合A和B没有公共元素,则称A和B互斥。
4. 互补集:若两个集合A和B的并集是全集U,且A和B互斥,则称A和B互为互补集。
四、集合的应用1. 隶属关系:根据给定条件,将对象分成两个集合,其中一个满足条件,另一个不满足条件。
2. 数学推理:利用集合的运算与关系,对数学问题进行推理和解决。
3. 概率统计:利用集合的概念,进行概率统计的相关计算和分析。
总结:通过掌握上述高三数学集合知识点,我们可以清晰地理解集合的定义、表示方法、运算与关系,以及集合的性质和应用。
在解决数学问题和进行数学推理时,能够灵活运用集合知识,提高解题能力和推理能力。
集合知识在数学学习中起到了桥梁和纽带的作用,帮助我们更好地理解和应用其他数学概念。
因此,在高三数学学习中,我们应该注重集合知识的学习和掌握,提高数学素养和解题能力。
集合框架
集合框架:★★★★★,用于存储数据的容器。
特点:1:对象封装数据,对象多了也需要存储。
集合用于存储对象。
2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合。
因为集合是可变长度的。
集合和数组的区别:1:数组是固定长度的;集合可变长度的。
2:数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
3:数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。
数据结构:就是容器中存储数据的方式。
对于集合容器,有很多种。
因为每一个容器的自身特点不同,其实原理在于每个容器的内部数据结构不同。
集合容器在不断向上抽取过程中。
出现了集合体系。
在使用一个体系时,原则:参阅顶层内容。
建立底层对象。
--------------------------------------------------------------< java.util >-- Collection接口:Collection:|--List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。
元素可以重复。
|--Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。
必须保证元素唯一性。
1,添加:add(object):添加一个元素addAll(Collection) :添加一个集合中的所有元素。
2,删除:clear():将集合中的元素全删除,清空集合。
remove(obj) :删除集合中指定的对象。
注意:删除成功,集合的长度会改变。
removeAll(collection) :删除部分元素。
部分元素和传入Collection一致。
3,判断:boolean contains(obj) :集合中是否包含指定元素。
boolean containsAll(Collection) :集合中是否包含指定的多个元素。
boolean isEmpty():集合中是否有元素。
4,获取:int size():集合中有几个元素。
Java基础知识点:集合框架
Java基础知识点:集合框架Java是一门面向对象的编程语言,它随着互联网的发展而被广泛应用,尤其在Web开发领域中。
其中,集合框架是Java编程中的基础知识点之一。
集合框架是Java提供的一组类和接口,用于存储和操作一组对象。
它包括三个核心接口:List、Set、Map,以及它们的实现类。
开发者可以通过使用这些接口和类,轻松地处理对象的集合,实现各种不同的数据结构和算法,以支持不同的业务需求。
在Java集合框架中,List接口是一个有序的集合,它有以下常见的实现类:1. ArrayList:基于可变数组的实现方式,支持随机访问和快速向尾部添加元素。
2. LinkedList:基于双向链表的实现方式,支持快速向头部和尾部添加或删除元素。
3. Vector:和ArrayList实现方式相似,但线程安全。
List接口中,常用的方法包括:add、remove、get、set、size 等。
Set接口是一个无序的集合,它不允许包含重复元素,常见的实现类有:1. HashSet:基于哈希表的实现方式,支持快速判断元素是否存在。
2. TreeSet:基于红黑树的实现方式,内部元素会自动排序。
3. LinkedHashSet:和HashSet实现方式相同,但维护了元素的插入顺序。
Set接口中,常用的方法包括:add、remove、contains、isEmpty、size等。
Map接口是一组键值对的集合,它将键映射到值,同一个键只能对应一个值,常见的实现类有:1. HashMap:基于哈希表的实现方式,支持快速查找和添加键值对。
2. TreeMap:基于红黑树的实现方式,内部按照键的自然顺序(如果是数字类型,则按照大小顺序)维护了键值对。
3. LinkedHashMap:和HashMap实现方式相同,但维护了键值对的插入顺序。
Map接口中,常用的方法包括:put、get、remove、containsKey、containsValue、size等。
集合框架
集合类集合是用于储存对象的容器,其长度是可变的。
Collection 接口和Map 接口:集合框架中有两大家族分别是Collection 接口和Map 接口。
Collection 接口是层次接口,而Map 接口是映射接口Collection 接口以分层的形式储存对象。
如Set 无序没有层次的接口元素没有顺序排列并且元素不能重复;List 列表层次接口;元素精准排列,元素可重复;Queue 是Map 接口提供了以“键/值”(key/value )对的映射形式的储存对象功能,Map 中不能包含相同的key ,每个key 只能有一个value 。
Key 决定了储存对象在映射中的位置。
Collection 接口是层次结构中的跟接口。
构成Collection 的单位称为元素。
Collection 接口:Collection 接口提供了以下几个方法:1. add(E e): 将指定的对象添加到集合中2. remove(Object o):将指定的对象从集合中移除ng.Object Map(译:映射)Collection(译:集合) HashMap (译:哈希映射) TreeMap (译:树形映射) Set(译:集合) Queue(译:列队) HashSet (译:哈希集合) TreeSet (译:数集合) ArrayList (译:数组列表) linkedList (译:链表)List(译:列表)3.isEmpty():返回bool值,判断当前集合是否为空4.iterator():返回在此Collection的元素上进行迭代的迭代器。
用于遍历集合中的对象5.size():返回int型值,获取该集合中的元素的个数Collection接口的下的List接口List接口继承了Collection接口,定义了两个方法:1.get(int index)方法:获得指定索引位置的元素2.set(int index,Object obj)方法:将集合中指定的索引位置的对象修改为指定对象L IST接口的实现类:A RRAY L IST 和L NKED L ISTArrayList优点在于查询速度快,缺点增加和删除速度慢LinkedList优点在于增加和删除速度快,缺点是查询速度慢ArrayList类:ArrayList类实现了可变的数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速随机访问。
集合的知识点总结框架
集合的知识点总结框架集合是数学中重要的基本概念之一,它是由一些确定的元素构成的整体。
集合论是数学的一个重要分支,研究集合的性质、关系和运算等。
在本文中,我们将从集合的定义、表示方法、运算法则以及集合之间的关系等方面进行探讨和总结。
一、集合的定义集合是由一些确定的元素构成的整体,这些元素可以是任意的对象,比如数字、字母、图形等。
集合的定义通常使用大写字母表示,如A、B、C等。
一个元素是否属于一个集合,可以用符号“∈”表示,例如a∈A表示元素a属于集合A。
二、集合的表示方法1. 列举法:将集合中的元素逐个列举出来,用大括号括起来表示,元素之间用逗号分隔。
例如,集合A={1, 2, 3}表示由元素1、2、3构成的集合A。
2. 描述法:用描述元素的特点或性质来表示集合。
例如,集合B={x | x是自然数,且x<10}表示由小于10的自然数构成的集合B。
三、集合的运算法则1. 并集:将两个集合的所有元素合并在一起,形成一个新的集合。
并集用符号“∪”表示。
例如,集合A={1, 2, 3},集合B={3, 4, 5},则A∪B={1, 2, 3, 4, 5}。
2. 交集:两个集合中共同存在的元素构成的集合。
交集用符号“∩”表示。
例如,集合A={1, 2, 3},集合B={3, 4, 5},则A∩B={3}。
3. 差集:从一个集合中减去另一个集合中共有的元素,得到的剩余元素构成的集合。
差集用符号“-”表示。
例如,集合A={1, 2, 3},集合B={3, 4, 5},则A-B={1, 2}。
4. 互斥集:两个集合没有共同的元素,称为互斥集。
例如,集合A={1, 2, 3},集合B={4, 5, 6},则A和B是互斥集。
四、集合之间的关系1. 包含关系:一个集合的所有元素都是另一个集合的元素,则前者被包含在后者中。
包含关系用符号“⊆”表示。
例如,集合A={1, 2, 3},集合B={1, 2, 3, 4, 5},则A⊆B。
高中数学-集合.知识框架
内容 基本要求集合的含义 会使用符号“∈”或“∉”表示元素与集合之间的关系;集合的表示能选择自然语言、图形语言、集合语言描述不同的具体问题; 理解集合的特征性质,会用集合的特征性质描述一些集合,如常用数集,方程或不等式的解集等 集合间的基本关系理解集合之间包含与相等的含义,及子集的概念.在具体情景中,了解空集和全集的含义;理解两个集合的交集和并集的含义,会求两个简单集合的交集与并集.理解在给定集合中一个子集的补集的含义,会求给定子集的补集集合的基本运算 掌握有关的术语和符号,会用它们表达集合之间的关系和运算.能使用维恩图表达集合之间的关系和运算.1.集合:某些指定的对象集在一起成为集合。
(1)集合中的对象称元素,若a 是集合A 的元素,记作A a ∈;若b 不是集合A 的元素,知识内容高考要求模块框架集合记作A b ∉;(2)集合中的元素必须满足:确定性、互异性与无序性;确定性:设A 是一个给定的集合,x 是某一个具体对象,则或者是A 的元素,或者不是A 的元素,两种情况必有一种且只有一种成立;互异性:一个给定集合中的元素,指属于这个集合的互不相同的个体(对象),因此,同一集合中不应重复出现同一元素;无序性:集合中不同的元素之间没有地位差异,集合不同于元素的排列顺序无关; (3)表示一个集合可用列举法、描述法或图示法;列举法:把集合中的元素一一列举出来,写在大括号内;例如:{1,2,3,4,5},{1,2,3,4,5,}描述法:把集合中的元素的公共属性描述出来,写在大括号{}内。
例如:大于3的所有整数表示为:{Z |3}x x ∈>方程2250x x --=的所有实数根表示为:{R x ∈|2250x x --=}具体方法:在大括号内先写上表示这个集合元素的一般符号及取值(或变化)范围,再画一条竖线,在竖线后写出这个集合中元素所具有的共同特征。
注意:列举法与描述法各有优点,应该根据具体问题确定采用哪种表示法,要注意,一般集合中元素较多或有无限个元素时,不宜采用列举法。
集合框架
{[4073303,7-102-C],[ 4073301,7-102-A], [4073302,7-102-B]}
import java.util.*; public class TestMap{ public static void main(String[] args) { HashMap map = new HashMap(); map.put("4073301","7-102-A"); map.put("4073302","7-102-B"); map.put("4073303","7-102-C"); 取得map的所有key组成的set Set keySet = map.keySet(); Iterator it = keySet.iterator(); while(it.hasNext()){ String key = (String)it.next(); String value = (String)map.get(key); } } }
Map接口 源自由键/值对组成条目存储在图中。 键值可以是任意类型的对象 键值不能重复 有三种类型的Map HashMap ListHashMap TreeMap
…
Map
+clear(): void +containsKey(key: Object): boolean Removes all mappings from this map Returns true if this map contains a mapping for the specified key.
{4073302=7-102-B, 4073301=7-102-A, 4073303=7-102-C}
第十一章 集合
集合和数组的区别? A:长度区别 数组固定 集合可变 B:内容区别 数组可以是基本类型,也可以是引用类型 集合只能是引用类型 C:元素内容 数组只能存储同一种类型 集合可以存储不同类型(其实集合一般存储的也是同一种类 型)
一、Java集合框架结构
二、Collection接口
基本操作 int size() boolean isEmpty() 返回集合元素的个数 判断集合是否包含集合元素 向集合中添加指定元素 从集合中移除指定元素 返回在集合元素上进行迭代的迭代器
二、Collection接口
Collection集合元素的遍历方式
两种集合的遍历方式
for(Object for-each 结构遍历 o:c){
System.out.print(o.toString()); } interface Iterator<E>{ public 迭代器 Iterator 遍历
四、Set接口及其实现类
Set是一个不能包含重复元素的接口。 Set接口是Collection的子接口 只包含从Collection继承过来的方法 增加了对add方法的限制,不允许有重复的元素。
基本操作 int size() boolean isEmpty() boolean contains(Object o) boolean add(E批量操作 element) 返回集合元素的个数 判断集合是否包含集合元素 判断集合中是否包含指定元素 向集合中添加指定元素
迭代器使用
并发修改异常 A:出现的现象 B:原因
迭代器遍历集合,集合修改集合元素
迭代器是依赖于集合的,而集合的改变迭代器并不知 道。
C:解决方案
a:迭代器遍历,迭代器修改(ListIterator) 元素添加在刚才迭代的位置 b:集合遍历,集合修改(size()和get()) 元素添加在集合的末尾
集合框架
集合框架1、集合定义:集合是指一组相关的元素组成的一个单一的对象2、什么是集合框架集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。
任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
∙接口:即表示集合的抽象数据类型。
Collection顶层接口。
∙实现:也就是集合框架中接口的具体实现。
常用ArrayList、Vector、HashMap、Hashtable∙算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。
这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现。
事实上,算法是可复用的函数。
算法是指Collections类中提供的静态方法。
3 Collection接口Java API中所用的集合类,都是实现了Collection接口,常用的类如下:Collection<--List<--VectorCollection<--List<--ArrayListVector : 基于Array的List,实现一个类似数组一样的表,自动增加容量来容纳你所需的元素。
使用下标存储和检索对象就象在一个标准的数组中一样。
你可以用一个迭代器从一个Vector 中检索对象。
Vector是唯一的同步容器类,当两个或多个线程同时访问时也是性能良好的。
ArrayList:同Vector一样是一个基于Array上的链表,但是不同的是ArrayList不是同步的。
所以在性能上要比Vector优越一些,但是当运行到多线程环境中时,可需要自己在管理线程的同步问题。
List总结:1. 所有的List中只能容纳单个不同类型的对象组成的表,而不是Key-Value键值对。
例如:[ tom,1,c ];2. 所有的List中可以有相同的元素,例如Vector中可以有[ tom,koo,too,koo ];3. 所有的List中可以有null元素,例如[ tom,null,1 ];4. 基于Array的List(Vector,ArrayList)适合查询,而LinkedList(链表)适合添加,删除操作。
集合框架概述
集合框架--集合框架体系概述集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。
任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
接口:即表示集合的抽象数据类型。
接口提供了让我们对集合中所表示的内容进行单独操作的可能。
实现:也就是集合框架中接口的具体实现。
实际它们就是那些可复用的数据结构。
算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。
这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现。
事实上,算法是可复用的函数。
集合框架体系主要如上图所示,集合类主要分为两大类:Collection和Map。
先简单概述几个相关问题。
1、先说明下什么是集合?当数据多了需要存储,需要容器,但是数据的个数又不确定的时候,无法使用数组(数组长度是固定的,集合长度是可变的),这时便使用了Java中的另一个容器--集合。
2、数组与集合有哪些不同?数组中存储的是同一类型的元素,可以存储基本数据类型值。
集合存储的是对象,而且对象的类型可以不一致。
3、什么时候使用集合呢?当对象多的时候,先进行存储。
在实际的使用中,我们有了更多的需求,于是出现了集合框架,有了更多的容器(每个容器有自己的数据结构,因此其功能也不同),在不断向上抽取的过程中,出现了体系,最终形成了集合框架.细节:1 集合中存储的都是对象的地址(引用)2 集合中是否可以存储基本数值?不可以,但在jdk1.5后可以这么写,但是存储的还是对象(基本数据类型包装类对象)3 存储的时候自动提升为Object类型,取出的时候如果需要使用元素的特有内容,必须进行向下转型接下来,简单谈谈Collection,collection是List、Set等集合高度抽象出来的接口,它包含了这些集合的基本操作。
主要分为:List和Set。
一、List接口:通常表示一个列表(数组、队列、链表、栈等),有序的,元素是可以重复的,通过索引就可以精确的操作集合中的元素,List接口的特有方法,都是围绕索引定义的。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
获取最后一条狗狗信息
Dog dogLast= (Dog)dogs.getLast(); System.out.println("最后一条狗狗昵称是"+dogLast.getName()); dogs.removeFirst(); dogs.removeLast(); … } }
删除第一个狗狗和最后 一个狗狗
Java集合框架包含的内容
Collection
List
Set
• • •
Collection 接口存储一组不唯一,无序的对象 List 接口存储一组不唯一,有序(插入顺序)的对象 Set 接口存储一组唯一,无序的对象
Map
• Map接口存储一组键值对象,提供key到value的映射
List接口的实现类
LinkedList的特有方法
• LinkedList的特殊方法
Hale Waihona Puke 方法名voidaddFirst(Object o) voidaddLast(Object o) ObjectgetFirst() ObjectgetLast() ObjectremoveFirst() ObjectremoveLast()
Java集合框架包含的内容
Collection 1 接口 Map
List
Set
HashMap
TreeMap
ArrayList
2 3 具体类 算法
LinkedList
HashSet
TreeSet 提供了对集合进行排序、 遍历等多种算法实现
Collections
Java集合框架为我们提供了一套性能优良、使用方便的接口和类,它们位于 java.util包中 我们不必再重新发明轮子,只需学会如何使用它们,就可处理实际应用中问题
countries.remove("FR"); 删除指定元素,判断是 System.out.println("Map中包含FR的key吗?" + 否包含指定元素 countries.containsKey("FR"));
System.out.println( countries.keySet() ) ; System.out.println( countries.values() ); System.out.println( countries ); } }
void add(int index,Object o) int size()
Object get(int index)
boolean contains(Object o) boolean remove(Object o) Objectremove(int index)
LinkedList集合类
• 在集合任何位置(头部、中间、尾部)添加、获取、删除狗狗对 象
方法名
boolean add(Object o)
说
明
在列表的末尾顺序添加元素,起始索引位置从0 开始 在指定的索引位置添加元素。索引位置必须介 于0和列表中元素个数之间 返回列表中的元素个数 返回指定索引位置处的元素。取出的元素是 Object类型,使用前需要进行强制类型转换 判断列表中是否存在指定元素 从列表中删除元素 从列表中删除指定位置元素,起始索引位置从0 开始
List
ArrayList •
LinkedList
ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和 随机访问元素的效率比较高
•
LinkedList采用链表存储方式。插入、删除元素时效率比较高
ArrayList集合类
• 存储多条狗狗信息,获取狗狗总数,逐条打印出各条狗狗信息
集合类对比
• Vector和ArrayList的异同
– 实现原理相同,功能相同,很多情况下可以互用 – 两者的主要区别如下 • Vector线程安全,ArrayList重速度轻安全,线程非安全 • 长度需增长时,Vector默认增长一倍,ArrayList增长50%
• Hashtable和HashMap的异同
} } }
ArrayList集合类
• 扩充以下几部分功能 – 删除指定位置的狗狗,如第一个狗狗 – 删除指定的狗狗,如删除feifeiDog对象 – 判断集合中是否包含指定狗狗
• List接口提供相应方法remove()、contains(),直接使用即可
List接口常用方法
• List接口常用方法
说
在列表的首部添加元素 在列表的末尾添加元素
明
返回列表中的第一个元素 返回列表中的最后一个元素 删除并返回列表中的第一个元素 删除并返回列表中的最后一个元素
集合框架的优点
提供有用的数据结构和算法,从而减少编程工作
提高了程序速度和质量,因为它提供了高性能的数据结构和算法 允许不同 API 之间的互操作,API之间可以来回传递集合 可以方便地扩展或改写集合
• boolean hasNext(): 判断是否存在另一个可访问的元素 • Object next(): 返回要访问的下一个元素
迭代器Iterator
public class Test5 { public static void main(String[] args) { // 1、创建多个狗狗对象 Dog ououDog = new Dog("欧欧", "雪娜瑞"); … // 2、创建ArrayList集合对象并把多个狗狗对象放入其中 List dogs = new ArrayList (); dogs.add(ououDog); 通过迭代器依次输出所 … 有狗狗的信息
• 插入、删除操作频繁时,可使用LinkedList来提高效率 • LinkedList还额外提供对头部和尾部元素进行添加和删除操作的 方法
LinkedList集合类
public class Test3 { public static void main(String[] args) { … // 创建多个狗狗对象 LinkedList dogs = new LinkedList(); 创建LinkedList集合对象并把 dogs.add(ououDog); 多个狗狗对象放入其中 dogs.add(yayaDog); dogs.addLast(meimeiDog); dogs.addFirst(feifeiDog); 获取第一条狗狗信息 Dog dogFirst= (Dog)dogs.getFirst(); System.out.println("第一条狗狗昵称是"+dogFirst.getName() );
Map接口
• 建立国家英文简称和中文全名间的键值映射,并通过key对value 进行操作,应该如何实现数据的存储和操作呢?
• Map接口专门处理键值映射数据的存储,可以根据键实现对值的 操作 • 最常用的实现类是HashMap
HashMap类示例
public class Test4 { public static void main(String[] args) { Map countries = new HashMap(); countries.put("CN", "中华人民共和国"); countries.put("RU", "俄罗斯联邦"); countries.put("FR", "法兰西共和国"); countries.put("US", "美利坚合众国");
• 通过List接口的实现类ArrayList实现该需求 – 元素个数不确定 – 要求获得元素的实际个数 – 按照存储顺序获取并打印元素信息
ArrayList集合类示例
public class Test1 { public static void main(String[] args) { Dog ououDog = new Dog("欧欧", "雪娜瑞"); Dog yayaDog = new Dog("亚亚 ", "拉布拉多 "); 创建 ArrayList 对象并把四个 Dog meimeiDog = new Dog("美美", "雪娜瑞"); 狗狗对象放入其中 Dog feifeiDog = new Dog("菲菲 ", "拉布拉多"); List dogs = new ArrayList(); dogs.add(ououDog); dogs.add(yayaDog); dogs.add(meimeiDog); 输出狗狗的数量 dogs.add(2, feifeiDog); // 添加feifeiDog 到指定位置 System.out.println("共计有" + dogs.size() + "条狗狗。"); 获取第i个元素 System.out.println("分别是:"); for (int i = 0; i < dogs.size(); i++) { Dog dog = (Dog) dogs.get(i); System.out.println(dog.getName() + "\t"+ dog.getStrain());
System.out.println("使用Iterator遍历,所有狗狗昵称和品种是:"); Iterator it = dogs.iterator(); while (it.hasNext()) { Dog dog = (Dog) it.next(); System.out.println(dog.getName()+"\t"+dog.getStrain()); } }