Java程序设计教程第9章 集合框架
第9讲 集合框架
list.add(“Struts"); list.add(“Hibernate"); list.add(“Spring");
所有的Java集合类都定义了toString( )方法,因此可以在屏幕上显 示整个列表的信息:
System.out.println("list = " + list);
打印对象或连接对象与字符串时,会自动调用toString()方法。而 ArrayList类中重载的toString()方法会自动构造一个包含列表中所有 元素的字符串,所有内容在一对方括号内,元素之间用逗号分隔 指定位置增:ArrayList类提供重载的add(index, value)方法,在 列表指定索引位置添加新元素,后续元素自动向右移动一个位置
list.add(1,“JavaScript"); System.out.println("now list = " + list);
指定位置删:ArrayList也提供有删除指定索引位置元素的
remove(index)方法
System.out.println("before remove list = " + list); list.remove(0); list.remove(1);
java_Lesson9(集合框架)
数据元素呈线性关系。必存在唯一的称为“ 数据元素呈线性关系。必存在唯一的称为“第一 个”的数据元素;必存在唯一的称为“最后一个” 的数据元素;必存在唯一的称为“最后一个” 的数据元素;除第一个元素外,每个元素都有且 只有一个前驱元素; 除最后一个元素外,每个元 素都有且只有一个后继元素。 所有数据元素在同一个线性表中必须是相同的数 据类型。
出队 a1 a2 a3 … an 入队
队头
队尾
ArrayList和LinkedList比较 ArrayList和LinkedList比较
ArrayList底层采用数组完成,而LinkedList ArrayList底层采用数组完成,而LinkedList 则是以一般的双向链表(double则是以一般的双向链表(double-linked list)完 list)完 成,其内每个对象除了数据本身外,还有 两个 引用,分别指向前一个元素和后一个 元素。 如果我们经常在List的开始处增加元素,或 如果我们经常在List的开始处增加元素,或 者在List中进行插入和删除操作,我们应该 者在List中进行插入和删除操作,我们应该 使用LinkedList,否则的话,使用ArrayList 使用LinkedList,否则的话,使用ArrayList 将更加快速。
集合类
集合(Collection)是各种编程的基石。只要需 集合(Collection)是各种编程的基石。只要需 要保留一组对象,就必须有某种集合。 Java以数组形式提供对集合的支持。但数组 Java以数组形式提供对集合的支持。但数组 是定长的,如果元素会不断增长或缩减, 那么数组就难当此任了。在Java1.2后它为 那么数组就难当此任了。在Java1.2后它为 集合提供了一个全面的解决方法,称为集 合框架(Colletions Framework)。 合框架(Colletions Framework)。 集合框架是基于java.util包中一组接口建立 集合框架是基于java.util包中一组接口建立 的。
Java程序设计教程第9章 集合框架
使用HashMap存储 多组键值对
String country = (String) countries.get("CN"); ……
获取指定元素的值
System.out.println("Map中共有"+countries.size() +"组数据");
countries.remove("FR"); System.out.println("Map中包含FR的key吗?" +
从列表中删除指定位置元素, Object remove(int index) 起始索引位置从0开始
10/43
课堂操作——使用List存储企鹅信息
练习
需求说明
把多个企鹅的信息添加到集合中 查看企鹅的数量及所有企鹅的信息 删除集合中部分企鹅的元素 判断集合中是否包含指定企鹅
11/43
LinkedList集合类3-1
System.out.println("共计有" + dogs.size() + "条狗狗。");
System.out.println("分别是:"); for (int i = 0; i < dogs.size(); i++) {
输出狗狗的数量
Dog dog = (Dog) dogs.get(i);
创建LinkedList集合 对象并存储狗狗对象
Dog dogFirst= (Dog)dogs.getFirst();
获取第一条狗狗信息
System.out.println("第一条狗狗昵称是"+dogFirst.getName() );
Java集合框架
Collection方法举例
import java.util.*; public class CollectionTest { public static void main(String args[]) { Collection c=new ArrayList(); c.add("hello world"); c.add(new Integer(100)); c.add(new Float(99.9f)); System.out.println(c.size()); System.out.println(c); } }
Set接口与集合操作相关的几个方法
Set s1=new HashSet(); Set s2=new HashSet(); s1.add("a");s1.add("b");s1.add("c"); s2.add("b");s2.add("c");s2.add("d"); Set s3=new HashSet(s1); s3.retainAll(s2);//求交集 Set s4=new HashSet(s2); s4.addAll(s1);//求并集 System.out.println(s3); System.out.println(s4);
List接口
List是Collection的子接口,实现List接口的容器中存放的对象是 有顺序的,而且可以重复。
List容器中存放的对象都有一个整数型的序号,记录该对象在容器 中的位置,可以根据序号来访问容器中的元素。 JDK提供实现List接口的类有ArrayList、LinkedList等。
Map接口的实现类-HashMap
Java集合框架
Java集合框架1.集合和数组的区别:集合存储的是对象,数组存储的是基本数据类型2.集合具体内容3.集合框架分类:Collection接口|----List接口|---ArrayList|---LinkedList|---Vector|---Set接口|---HashSet|---TreeSetMap接口|---HashTable|---HashMap|---TreeMap4.集合框架共性方法boolean add(Object o):该方法用于向集合里面添加一个元素,若集合对象被添加操作改变了,返回true.boolean addAll(Collection c):把集合c里面的所有元素添加到指定集合里面去,如果集合对象被添加操作改变了返回true.void clear():清除集合里面的所有元素,将集合长度变为0。
boolean contains(Object o):返回集合里是否包含指定的元素。
boolean containsAll(Collection c):返回集合里是否包含集合c内所有的元素。
boolean isEmpty():返回集合是否为空(长度是否为0)。
Iterator iterator():返回一个Iterator对象,用于遍历集合里的元素。
boolean remove(Object o):删除集合中指定元素o。
boolean removeAll(Collection c):从集合中删除集合c里面的元素。
若删除一个或以上返回true。
boolean retainAll(Collection c):从集合中删除集合c里不包含的元素。
int size():得到集合元素的个数。
Object[] toArray():把集合转成一个数组,所有集合元素编程数组元素。
5.集合遍历元素共性方法Iterator主要遍历Collection集合中的元素,也有称为迭代器或迭代精灵。
boolean hasNext():若被迭代的集合元素还没有被遍历,返回true.Object next():返回集合的下一个元素.void remove():删除集合上一次next()方法返回的元素。
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即可。
Java 集合框架
• 集散列码是集中元素散列码的总和
– 不论集的内部顺序如何,两个相等的集会报告相同的散列码
Set练习 • 练习1. 创建两个Set,遍历输出并比较
– 补充代码 – 编译:javac SetCompare.java – 运行:java SetCompare
List 接口
• 定义一个允许重复项的有序集合
– “集合框架”的 Java 类封装数据结构和算法
• 提供一个标准编程接口 • 允许程序员轻松的定义如堆栈、队列等更高级的数据抽象
数学背景
• 集合(collection)和数学上直观的集(set)的概念是相同的
– 集是一个唯一项组,也就是说组中没有重复项 – “集合框架”包含了一个 Set 接口和许多具体的 Set 类 – 正式的集概念比 Java 技术早一个世纪
– void clear()
• 除去所有元素
– void removeAll(Collection collection)
• 只除去了元素的一个子集
– void retainAll(Collection collection)
• 除去不属于另一个集合的元素 -交
• AbstractCollection 类
• 英国数学家 George Boole 正式的定义了集的概念
数学背景(cont)
• 集的示例:
– – – – – 大写字母集“A”到“Z” 非负整数集{0, 1, 2 ...} 保留的 Java 编程语言关键字集 {'import', 'class', 'public', 'protected'...} 数据库查询返回记录集 空集{}
– 基本操作 :添加和除去
JAVA集合框架
还有一些泛型容器类包括List,Set和Map。他们处理对象的时候就好像这些对象都没有自己的具体类型一样。 也就是说,容器将它所含的元素都看成是(Java中所有类的根类)Object的。这样你只需要建一种容器,就能把 所有类型的对象全都放进去。从这个角度来看,这种作法很不错(只是苦了primitive。
数组与容器
数组是程序语言中最常用的数据结构。在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的 形式组织起来,这些按序排列的同类数据元素的集合称为数组。一个数组包含多个数组元素,这些数组元素可以 是基本数据类型也可以是对象类型。
数组与其它容器的区别体现为三个方面:效率,类型识别以及可以持有primitives。数组是Java提供的,能 随机存储和访问reference序列的诸多方法中的,最高效的一种。数组是一个简单的线性序列,所以它可以快速 的访问其中的元素。但是速度是有代价的;当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里 不能改变。也许你会提议先创建一个数组,等到快不够用的时候,再创建一个新的,然后将旧的数组里的 reference全部导到新的里面。其实(我们以后会讲的)ArrayList就是这么做的。但是这种灵活性所带来的开 销,使得ArrayList的效率比起数组有了明显下降。
数组元素
Java里面有两种能让你实现比较功能的方法。一是实现rable接口,并以此实现类“自有的”比较方法。这? 这个方法能接受另一个对象作为参数,如果现有对象比参数小,它就会返回一个负数,如果相同则返回零,如果 现有的对象比参数大,它就返回一个正数。
Java集合框架总结
JA V A集合框架一、集合框架在实际开发中,需要将对象根据不同的需求而存储在特定的数据结构容器中。
但是数组虽然是一种用来存储数据的数据结构,但是它的局限性很低,很难满足各种的需求,所以JDK出现了用来满足各种需求的框架——集合框架。
“集合框架”主要由一组用来操作对象的接口组成。
不同接口描述一组不同数据类型。
常见的集合类有:1)实现Collection接口的:List接口、Set接口。
2)实现Map接口的。
二、Collection接口Collection接口表示了如何把一组对象作为它的元素。
JDK没有直接提供Collection接口的实现,Collection接口的实现依赖于两个继承自自己的接口:Set和List。
所有通过实现Collection接口的子接口的类应该提供两个标准的构造器:一个不需要参数的构造器,用来创建一个空的集合,另外一个需要一个类型作为参数的构造器,用来创建一个和参数的类型相同的元素的集合。
int size():返回这个集合中的元素的数量。
boolean isEmpty():返回集合是否包含元素,如果没有的话,返回true。
boolean contains(E e):如果这个集合包含某个指定的元素,返回true。
Iterator<E> iterator():返回这个集合中的所有元素的迭代。
boolean add(E e):向集合中添加新的元素,如果添加成功,返回true。
boolean remove(E e):从集合中删除指定元素,如果删除成功,返回true。
boolean containsAll(Collection<?> c):这个集合是否包含指定集合中的所有的元素。
boolean addAll(Collection<? extends E> c):添加指定的集合中的所有元素到这个集合中。
boolean removeAll(Collection<?> c):删除当前集合中与给定集合相同的元素。
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学习笔记-第九章-Java集合框架(1)
第一章此次内容1.1.1.Java集合框架中常用接口及特征1.1.2.使用ArrayList存取数据1.1.3.使用HashMap存取数据1.1.4.Java中的泛型机制第二章具体内容2.1. 为什么要有集合2.1.1.Java中的例子2.1.2.package com.aaa.collection;2.1.3./**2.1.4.* @author ky2.1.5.* @version 创建时间:2019年8月9日2.1.6.* 希望有一个容器可以存储班级的20名学生的信息2.1.7.* 声明一个长度为20的数组2.1.8.* 我们使用随机数的方式给他们赋值算是20名学生的信息2.1.9.* 但是此时转班过来了三名同学,那么这个时候我们要存储23名学生的成绩2.1.10.* 此时我们应该怎么办?2.1.11.* 1.对数组扩容2.1.12.* 2.使用集合2.1.13.*/2.1.14.public class AAAClass {2.1.14.1. public static void main(String[] args) {2.1.14.1.1.int[] arr = new int[20];2.1.14.1.2.for (int i = 0; i < arr.length; i++) {2.1.14.1.2.1. arr[i] = (int)(Math.random() * 10);2.1.14.1.3.}2.1.14.1.4.for (int i : arr) {2.1.14.1.4.1. System.out.print(i + " ");2.1.14.1.5.}2.1.14.2. }2.1.14.3.2.1.15.}2.2. 集合的特性2.3. 只能存放引用数据类型2.4. 容量没有限制2.5. 由于集合的种类很多,不同的类有不同的特性,我们在使用的时候可以根据不同的需求对集合选择2.6. 集合都有哪些种类2.6.1.集合主要分为两类2.6.2.2.7. Collection学习2.8. package com.aaa.collection;2.9. import java.util.ArrayList; 2.10. import java.util.Collection;2.11. /**2.12. * @author ky2.13. * @version 创建时间:2019年8月9日2.14. * Collection2.15. * public interface Collection<E> extendsIterable<E>2.16. * 1.首先它是接口,其他他有父类2.17. *2.18. *Collection两个主要的子接口list,set2.19. * 如果去创建一个Collection家族的集合?2.20. * 要找实现类这次主要用ArrayList2.21. *2.22. * Collection定义了很多方法方法学习2.23. * 增加元素的方法2.24. * boolean add(E e) 把参数假如对象集合,返回值代表是否增加成功在这里里边E是泛型先不管2.25. * boolean addAll(Collection<? extends E> c)将指定集合中的所有元素添加到此集合(可选操作)2.26. * 移除元素的方法2.27. * void clear() 从此集合中删除所有元素(可选操作)。
java的集合框架最全详解(图)
java的集合框架最全详解(图)纯个⼈整理,如有错误请指正。
java的集合框架最全详解(图)前⾔:数据结构对程序设计有着深远的影响,在⾯向过程的C语⾔中,数据库结构⽤struct来描述,⽽在⾯向对象的编程中,数据结构是⽤类来描述的,并且包含有对该数据结构操作的⽅法。
在Java语⾔中,Java语⾔的设计者对常⽤的数据结构和算法做了⼀些规范(接⼝)和实现(具体实现接⼝的类)。
所有抽象出来的数据结构和操作(算法)统称为Java集合框架(Java Collection Framework)。
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允许相同的元素⽽另⼀些不⾏。
⼀些能排序⽽另⼀些不⾏。
Java SDK不提供直接继承⾃Collection的类,Java SDK提供的类都是继承⾃Collection的“⼦接⼝”如List和Set。
java集合框架详解
集合框架被设计成要满足以下几个目标。
该框架必须是高性能的。
基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
对一个集合的扩展和适应必须是简单的。
为此,整个集合框架就围绕一组标准接口而设计。
你可以直接使用这些接口的标准实现,诸如:LinkedList, HashSet, 和TreeSet等,除此之外你也可以通过这些接口实现自己的集合。
从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射。
Collection 接口又有3 种子类型,List、Set 和Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap 等等。
集合框架是一个用来代表和操纵集合的统一架构。
所有的集合框架都包含如下内容:接口:是代表集合的抽象数据类型。
例如Collection、List、Set、Map 等。
之所以定义多个接口,是为了以不同的方式操作集合对象实现(类):是集合接口的具体实现。
从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。
算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。
这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
除了集合,该框架也定义了几个 Map 接口和类。
Map 里存储的是键/值对。
尽管 Map 不是集合,但是它们完全整合在集合中。
集合接口1 Collection 接口Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。
java集合框架
集合框架Collection(包括add,remove,contains,clear,iterator。
等操作)|---List:元素是有序的,元素可以重复。
因为该集合体系有索引。
|---ArrayList:底层的数据结构使用的是数组结构。
特点:查询速度很快。
但是增删稍慢。
线程不同步。
|---LinkedList:底层使用的是链表数据结构。
特点:增删速度快,查询稍慢。
|---Vector:底层是数组的数据结构。
线程同步。
被ArrayList替代了。
枚举是Vector的特有的取出方式。
(其实枚举和迭代是一样的,因为枚举的名称以及方法的名称都很长,所以被迭代器取代了)|---Set:元素是无序的,元素不可以重复。
|---HashSet:底层数据结构是哈希表,线程时不同步的。
存取速度快。
但是要在内存中开辟比较大的空间。
HashSet是如何保证元素唯一性的呢?是通过元素的两个方法,hashcode和equals来完成。
(复写两个方法)如果元素的HashCode值相同,才会判断equals是否为ture。
如果元素的HasnCode值不同,不会调用equals。
注意:对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法|---TreeSet:可以对Set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:compareTo方法return 0。
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法这种方式也称为元素的自然顺序,或者叫做默认顺序。
TreeSet排序的第二种方式:当元素自身不具备比较性时,或者具备的比较性不是所为需要的,这时就需要让集合自身具备比较性,在集合初始化时,就有了比较方式。
(见TreeMap练习)当两种排序都存在时,以比较器为主,定义一个类,实现coparator接口,覆盖compare方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
创建LinkedList集合 对象并存储狗狗对象
Dog dogFirst= (Dog)dogs.getFirst();
获取第一条狗狗信息
System.out.println("第一条狗狗昵称是"+dogFirst.getName() );
Dog dogLast= (Dog)dogs.getLast();
如果并不知道程序运行时会需要多少对象,或者需要
更复杂方式存储对象——可以使用Java集合框架
2/43
Java集合框架包含的内容2-1
Java集合框架提供了一套性能优良、使用方便的 接口和类,它们位于java.util包中
1 接口
Collection
Map
List
Set
ArrayList LinkedList HashSet TreeSet
//创建四个狗狗对象
…… List dogs = new ArrayList();
创建ArrayList对象
dogs.add(ououDog);
并存储狗狗
dogs.add(yayaDog);
dogs.add(meimeiDog);
dogs.add(2, feifeiDog);
// 添加feifeiDog到指定位置
set.add(s1);
set.add(s2);
set.add(s3);
System.out.println(set.size());
1
16/43
Set接口3-3 Set接口
HashSet是Set接口常用的实现类
Set newsTitleSet = new HashSet(); NewTitle car = new NewTitle(1, "汽车", "管理员"); //增加元素 newsTitleSet.add(car); //获取元素个数 System.out.println("新闻标题数目为:" + newsTitleList.size() + “条");
System.out.println("共计有" + dogs.size() + "条狗狗。");
System.out.println("分别是:"); for (int i = 0; i < dogs.size(); i++) {
输出狗狗的数量
Dog dog = (Dog) dogs.get(i);
boolean hasNext(): 判断是否存在另一个可访问的元素 Object next(): 返回要访问的下一个元素
方法2:增强for循环
23/43
迭代器Iterator2-2
小结:遍历Map
迭代器Iterator
Set keys=dogMap.keySet(); //取出所有key的集合 Iterator it=keys.iterator(); //获取Iterator对象 while(it.hasNext()){
Set 接口存储一组唯一,无序的对象
Map
Map接口存储一组键值对象,提供key到value的映射 4/43
List接口的实现类
List
ArrayList
LinkedList
ArrayList实现了长度可变的数组,在内存中分配连 续的空间。遍历元素和随机访问元素的效率比较高
LinkedList采用链表存储方式。插入、删除元素时效 率比较高
String key=(String)it.next(); //取出key Dog dog=(Dog)dogMap.get(key); //根据key取出对应的值 System.out.println(key+"\t"+dog.getStrain()); }
语法 增强for循环
从列表中删除指定位置元素, Object remove(int index) 起始索引位置从0开始
10/43
课堂操作——使用List存储企鹅信息
练习
需求说明
把多个企鹅的信息添加到集合中 查看企鹅的数量及所有企鹅的信息 删除集合中部分企鹅的元素 判断集合中是否包含指定企鹅
11/43
LinkedList集合类3-1
小结:使用ArrayList移除、判断元素
……
dogs.remove(0); dogs.remove(feifeiDog);
删除第一个狗狗和指定狗狗
……
判断是否包含指定狗狗
if(dogs.contains(meimeiDog))
System.out.println("\n集合中包含美美的信息");
使用HashMap存储 多组键值对
String country = (String) countries.get("CN"); ……
获取指定元素的值
System.out.println("Map中共有"+countries.size() +"组数据");
countries.remove("FR"); System.out.println("Map中包含FR的key吗?" +
else
System.out.println("\n集合中不包含美美的信息");
9/43
ArrayList集合类5-5
List接口常用方法
方法名
boolean add(Object o)
说明
在列表的末尾顺序添加元素, 起始索引位置从0开始
在指定的索引位置添加元素。 void add(int index,Object o) 索引位置必须介于0和列表中元素个数之间
int size()
返回列表中的元素个数
Object get(int index)
返回指定索引位置处的元素。取出的元素是 Object类型,使用前需要进行强制类型转换
boolean contains(Object o) 判断列表中是否存在指定元素 boolean remove(Object o) 从列表中删除元素
countries.containsKey("FR"));
获取Map元素个数
删除指定元素,判断 是否包含指定元素
System.out.println( countries.keySet() ) ;
System.out.println( countries.values() ); System.out.println( countries );
5/43
ArrayList集合类5-1
问题
如何存储多条狗狗信息,获取狗狗总数,逐条打 印出各条狗狗信息 ?
分析
通过List接口的实现类ArrayList实现该需求
元素个数不确定 要求获得元素的实际个数 按照存储顺序获取并打印元素信息
6/43
ArrayList集合类5-2
小结:使用ArrayList存储元素
方法名
void addFirst(Object o) void addLast(Object o) Object getFirst() Object getLast() Object removeFirst() Object removeLast()
说明
在列表的首部添加元素 在列表的末尾添加元素 返回列表中的第一个元素 返回列表中的最后一个元素 删除并返回列表中的第一个元素 删除并返回列表中的最后一个元素
Set接口3-1
15/43
Set接口3-2
Set接口如何判断加入对象是否已经存在呢?
采用对象的equals()方法比较两个对象是否相等
Set set=new HashSet();
String s1=new String("java");
String s2=s1;
String s3=new String ("java");
14/43
Set接口
Set接口存储一组唯一,无序的对象 HashSet是Set接口常用的实现类 Set中存放对象的引用
Set set=new HashSet(); String s1=new String("java"); String s2=s1; String s3=new String("JAVA"); set.add(s1); set.add(s2); set.add(s3); System.out.println(set.size());
……
}
逐个获取个元素
7/43
ArrayList集合类5-3
问题
扩充以下几部分功能
删除指定位置的狗狗,如第一个狗狗 删除指定的狗狗,如删除feifeiDog对象 判断集合中是否包含指定狗狗
分析
使用List接口提供的remove()、contains()方法
8/43
ArrayList集合类5-4
问题
在集合任何位置(头部、中间、尾部)添加、获取、删除狗狗对象
分析
插入、删除操作频繁时,可使用LinkedList来提高效率 LinkedList提供对头部和尾部元素进行添加和删除操作的方法
12/43
LinkedList集合类3-2
小结:使用LinkedList存储元素
// 创建多个狗狗对象 …… LinkedList dogs = new LinkedList(); dogs.add(ououDog); dogs.add(yayaDog); dogs.addLast(meimeiDog); dogs.addFirst(feifeiDog);