集合Collection.pptx
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
并且返回这个元素引用. 使用while配 合这个两个方法, 可以迭代处理
集合的所有元素
4) 迭代时候可以使用迭代器remove() 方法删除刚刚迭代的元素( remove() 一定要在next()方法后执行,删除的是 next()返回的元素)
在迭代过程中, 不能使用集合方法(add, remove, set) 更改集合
ArrayList al = new ArrayList();
al.add(num);
将基本类型数据转变为其包装类的过程称之 为: 装箱
将包装类的对象转变为基本类型称之为:拆箱
自动包装(auto boxing / unboxing)(java5 以后可以):
Integer i = 2;// i=new Integer(2); Object o = 3.5; System.out.println(o instanceof
编译期间期检查的类型约束. 运行期不检查泛型! 2) 可以用来约束类中元素的类型
Java泛型简介 1) Java5 以后提出的语法现象, 在
编译期间期检查的类型约束. 运行期不检查泛型! 2) 可以用来约束类中元素的类型
集合的迭代Iterate(遍历算法)(模仿了 数鸡蛋的方式)
1) 迭代操作: 播放列表 的 全部播放, 将 扑克牌全部发放
Double); //true int a = i+1;// a = i.intValue() + 1;
注意 1 包装类是final的类 2 包装类对象是不变的, 与字符串类似(不
变模式) Integer a = 1; Integer b = 2; a = a+b; //a = new Integer(a.intValue() +
2) java使用Iterator 接口描述了迭代 模式操作
Iterator 中的方法模式化设计, 专门配 合while循环操作
集合的迭代Iterate(遍历算法)(模仿了 数鸡蛋的方式)
1) 迭代操作: 播放列表 的 全部播放, 将 扑克牌全部发放
2) java使用Iterator 接口描述了迭代 模式操作
"2.718" -> 2.718 Double.parseDouble(String str);
应该将int这个基本类型转换为一个对象类型 (顶级父类是Object)
使用简单类型对应的包装类的构造
方法创建一个对应的包装类对象
int a = 10;
Integer num = new Integer(a);//将基本 类型转为对应的包装类
List:List是一个接口,它继承于 Collection接口。它定义了一个允许有 重复项的有序集合。那么,它的特征 就是:允许有重复项,有序。
Set:Set是一个接口,它也是继承于 Collection接口。它不允许集合中存在 重复项,无序。每个具体的 Set 实现 类依赖添加的对象的 equals()方法来 检查独一性。
例如:我们在做一个简单的ATM实现的时 候,一个卡号对应一个用户,每一张卡的 卡号是唯一的,而一个用户可以有几张卡。 这种情况,我们就可以用HashMap来存放 数据了。
HashMap(关键字:值), 关键字key是唯一不重 复的, 查找表
1) key可以是任何对象, Value可以任何对象, 2) key:value 成对的放置到集合中 3) 重复的key算一个, 重复添加是替换操作 4) 根据key的散列值计算散列表, 元素按照散
Iterator 中的方法模式化设计, 专门配 合while循环操作
3) Iterator 的实例可以从集合对象获 得, 是这个集合的一个元素序列
视图, 默认包含一个操作游标, 在第一 个元素之前, hasNext() 方法
可以检查游标是否有下一个元素, next() 方法移动游标到下一个元素
ArrayList(1.2以后新的) 是使用变长数组算法 实现的
List (线性表方法) Vector(1.0) 是使用变长数组算法实现是 List
矢量 向量
LinkedList 是采用双向循环链表实现的List
List 集合的实现
1 LinkedList 采用双向循环链表实现
2 ArrayList 变长数组算法实现 新的 快 非 线程安全
b.intValue()) 3 包装类覆盖了 toString equals hashCode compareTo
1) 集合复制, 默认的复制规则是浅表(浅层) 复制
A clone() 方法
B 使用复制构造器! Map map = new HashMap(); Map map2 = new HashMap(map);
2 LinkedList:LinkedList也是一个类,它 实现了List接口,它是一个双向链表结构的 集合。
LinkedList类中最常用的方法有: add(),get(),remove(),size(),clear()等方法。 这些方法在javaAPI中都有详细说明。
总结:
1 ArrayList、 LinkedList两个类都实现了
2) Comparator 比较工具, 用于临时定义 比较规则, 不是默认比较规则
Collections的sort方法默认使用集合 中元素的compareTo()方法比较
* 后进行排序,若想改变规则,可以使用 Collections的sort的重载方法,
* 传入一个比较器,来使用临时比较规 则进行排序( 用Comparator比较工 具)
HashMap = Entry(key:value)[](散列表)+ 散列算法(方法)(get/put)
ArrayList = Object[] + 线性算法(方法)
LinkedList = 双向循环链表 + 线性操作(方 法)
StringBuilder = char[] + 数组的操作
HashMap:HashMap是一个类,它实现了 Map这个接口。中文也叫散列表。它的特 点就是:键值对的映射关系。一个Key对应 一个Value。
Collections:是集合的工具类
Collection:是集合的接口,它有两个 子接口分别为:List和Set
比较大小
1) Comparable 可以比较的 用于类实现, 实现这个接口表示: 这个
类的实例可以比较大小的. 可以进行自然 排序. CompareTo()返回正数表示大,返 回负数表示小,返回0表示相等 Comparable的实现必须与equals() 的结 果一致, 就是相等的对象比较结果一定是0!
Map:Map也是一个接口,Map接口 不是Collection接口的继承。Map接口 用于维护键/值对(key/value)。它描 述了从不重复的键到值的映射。
重要的实现类:
1 ArrayList :ArrayList是一个类,他实 现了List接口,它封装了一个动态再分配 的Object[]数组。
3 Vector 变长数组算法实现 早期提供 慢 线程安全
Map 1 HashMap 新 2 Hashtable 旧 (1.2以前)
散列表概念
1 容量: 散列表中散列数组大小.
2 散列运算: key->散列值(散列数组下标)的算法,
如: "mm".hashCode()%10->8
3 散列桶:
它的特点是:有序,可以重复的数组。
ArrayList类中最常用的方法有: add(),get(),remove(),size()等方法。
例如:
List<User> list = new ArrayList<User>();//实例化一个对象
list.add(user);//在list中添加元素
List接口
2 ArrayList的特点是有序可以重复的, LinkedList是一个双向链表结构的。
3 特点来选择:对这个集合经常进行查找操 作,那么你最好用ArrayList;
经常增加,删除操作,那么最好用 LinkedList来存放。这些都是根据他的一个 特点来选择应用的。
ArrayList = Object[] + 线性表操作(增删改查) StringBuilder = char[] + 操作(增删改查)
HashMap中常用的方法有: put(),get(),clear(),containsKey()等 方法。 例如: HashMap map = new HashMap();// 实例化一个HashMap对象 map.put();//在map集合中添加元素
Java泛型简介 1) Java5 以后提出的语法现象, 在
散列值相同的元素的"线性集合"
4 加载因子: 就是散列数组加载率, 一般小于75%性能 比较理想
就是:元素数量/散列数组大小, 如: 7/10=70%
5 散列查找: 根据Key计算散列值, 根据散列值(下标找 到散列桶,在散列桶中顺序比较Key, 如果一样, 就返回 value
6 散列表中Key不同, Value可以重复
集合框架图
。集合框架中的核心接口是: List接口、Set接口和Map接 口。List接口和Set接口都是 继承了Collection接口的, 而Map接口是单独存在的。
我们学了知识是拿来应用的,那么对 于初学者来说怎样才能很好地应用集 合框架呢!给我感受最深的,也是最 重要的,那就是要知道集合框架中各 个接口和实现类的特征和他们的方法。 如果知道了他们的特征和方法,那我 我们在应用中就能得心应手了。好, 下面就让我们一起学习集合框架中几 个常用的接口和实现类的特征:
元素
Collections 集合的工具类, Arrays 数 组的工具类
1) 排序(sort()), 二分查找 (binarySearch()), 打乱(shuffle()), 填 充(fill())等操作
例如: Collections .sort();
Collection和Collections
containsKey(Object key):查看当前散列 表中是否包含给定的key值
containsValue(Object value):查看当前散 列表中是否包含给定的value值
isEmpty():散列表有无元素
keySet():返回当前散列表中所有的key(以
Set集合返回)
remove(Object key):根据key值删除这一 项
列值(不可见)排序 5) 默认的容量: 16 默认加载因子(加载率)
0.75 6) 根据key检索查找value值 7) 用于查找场合, 可以提高根据key查找效率
put(Object key,Object value):根 据给定key值存放value值
get(Object key):根据给定的key值 查找并返回对应的value值若没有 找到对应的key,返回null clear():清空散列表
java中的包装类
1) 包装类可以把基本类型包装为对象类型
2) 有八种包装类
int
Integer
long
Long
byte
Byte
short Short
float
Float
double Double
boolean Boolean
char
Character
3 包装类提供了 对应数据类型的工具方法 Integer.toHexString() Integer.toString(int) Integer.toBinaryString() Integer.parseInt(String) "3f"->int Integer.parstInt(String, int)
size():返回当前散列表中的元素总数
例如: HashMap map = new HashMap();// 实例化一个HashMap对象 map.put();//在map集合中添加元素
8) HashMap VS Hashtable A HashMap 新, 非线程安全, 不检查锁, 快
B Hashtable 旧 (1.2以前) 线程安全, 检查 锁, 慢一点
集合的所有元素
4) 迭代时候可以使用迭代器remove() 方法删除刚刚迭代的元素( remove() 一定要在next()方法后执行,删除的是 next()返回的元素)
在迭代过程中, 不能使用集合方法(add, remove, set) 更改集合
ArrayList al = new ArrayList();
al.add(num);
将基本类型数据转变为其包装类的过程称之 为: 装箱
将包装类的对象转变为基本类型称之为:拆箱
自动包装(auto boxing / unboxing)(java5 以后可以):
Integer i = 2;// i=new Integer(2); Object o = 3.5; System.out.println(o instanceof
编译期间期检查的类型约束. 运行期不检查泛型! 2) 可以用来约束类中元素的类型
Java泛型简介 1) Java5 以后提出的语法现象, 在
编译期间期检查的类型约束. 运行期不检查泛型! 2) 可以用来约束类中元素的类型
集合的迭代Iterate(遍历算法)(模仿了 数鸡蛋的方式)
1) 迭代操作: 播放列表 的 全部播放, 将 扑克牌全部发放
Double); //true int a = i+1;// a = i.intValue() + 1;
注意 1 包装类是final的类 2 包装类对象是不变的, 与字符串类似(不
变模式) Integer a = 1; Integer b = 2; a = a+b; //a = new Integer(a.intValue() +
2) java使用Iterator 接口描述了迭代 模式操作
Iterator 中的方法模式化设计, 专门配 合while循环操作
集合的迭代Iterate(遍历算法)(模仿了 数鸡蛋的方式)
1) 迭代操作: 播放列表 的 全部播放, 将 扑克牌全部发放
2) java使用Iterator 接口描述了迭代 模式操作
"2.718" -> 2.718 Double.parseDouble(String str);
应该将int这个基本类型转换为一个对象类型 (顶级父类是Object)
使用简单类型对应的包装类的构造
方法创建一个对应的包装类对象
int a = 10;
Integer num = new Integer(a);//将基本 类型转为对应的包装类
List:List是一个接口,它继承于 Collection接口。它定义了一个允许有 重复项的有序集合。那么,它的特征 就是:允许有重复项,有序。
Set:Set是一个接口,它也是继承于 Collection接口。它不允许集合中存在 重复项,无序。每个具体的 Set 实现 类依赖添加的对象的 equals()方法来 检查独一性。
例如:我们在做一个简单的ATM实现的时 候,一个卡号对应一个用户,每一张卡的 卡号是唯一的,而一个用户可以有几张卡。 这种情况,我们就可以用HashMap来存放 数据了。
HashMap(关键字:值), 关键字key是唯一不重 复的, 查找表
1) key可以是任何对象, Value可以任何对象, 2) key:value 成对的放置到集合中 3) 重复的key算一个, 重复添加是替换操作 4) 根据key的散列值计算散列表, 元素按照散
Iterator 中的方法模式化设计, 专门配 合while循环操作
3) Iterator 的实例可以从集合对象获 得, 是这个集合的一个元素序列
视图, 默认包含一个操作游标, 在第一 个元素之前, hasNext() 方法
可以检查游标是否有下一个元素, next() 方法移动游标到下一个元素
ArrayList(1.2以后新的) 是使用变长数组算法 实现的
List (线性表方法) Vector(1.0) 是使用变长数组算法实现是 List
矢量 向量
LinkedList 是采用双向循环链表实现的List
List 集合的实现
1 LinkedList 采用双向循环链表实现
2 ArrayList 变长数组算法实现 新的 快 非 线程安全
b.intValue()) 3 包装类覆盖了 toString equals hashCode compareTo
1) 集合复制, 默认的复制规则是浅表(浅层) 复制
A clone() 方法
B 使用复制构造器! Map map = new HashMap(); Map map2 = new HashMap(map);
2 LinkedList:LinkedList也是一个类,它 实现了List接口,它是一个双向链表结构的 集合。
LinkedList类中最常用的方法有: add(),get(),remove(),size(),clear()等方法。 这些方法在javaAPI中都有详细说明。
总结:
1 ArrayList、 LinkedList两个类都实现了
2) Comparator 比较工具, 用于临时定义 比较规则, 不是默认比较规则
Collections的sort方法默认使用集合 中元素的compareTo()方法比较
* 后进行排序,若想改变规则,可以使用 Collections的sort的重载方法,
* 传入一个比较器,来使用临时比较规 则进行排序( 用Comparator比较工 具)
HashMap = Entry(key:value)[](散列表)+ 散列算法(方法)(get/put)
ArrayList = Object[] + 线性算法(方法)
LinkedList = 双向循环链表 + 线性操作(方 法)
StringBuilder = char[] + 数组的操作
HashMap:HashMap是一个类,它实现了 Map这个接口。中文也叫散列表。它的特 点就是:键值对的映射关系。一个Key对应 一个Value。
Collections:是集合的工具类
Collection:是集合的接口,它有两个 子接口分别为:List和Set
比较大小
1) Comparable 可以比较的 用于类实现, 实现这个接口表示: 这个
类的实例可以比较大小的. 可以进行自然 排序. CompareTo()返回正数表示大,返 回负数表示小,返回0表示相等 Comparable的实现必须与equals() 的结 果一致, 就是相等的对象比较结果一定是0!
Map:Map也是一个接口,Map接口 不是Collection接口的继承。Map接口 用于维护键/值对(key/value)。它描 述了从不重复的键到值的映射。
重要的实现类:
1 ArrayList :ArrayList是一个类,他实 现了List接口,它封装了一个动态再分配 的Object[]数组。
3 Vector 变长数组算法实现 早期提供 慢 线程安全
Map 1 HashMap 新 2 Hashtable 旧 (1.2以前)
散列表概念
1 容量: 散列表中散列数组大小.
2 散列运算: key->散列值(散列数组下标)的算法,
如: "mm".hashCode()%10->8
3 散列桶:
它的特点是:有序,可以重复的数组。
ArrayList类中最常用的方法有: add(),get(),remove(),size()等方法。
例如:
List<User> list = new ArrayList<User>();//实例化一个对象
list.add(user);//在list中添加元素
List接口
2 ArrayList的特点是有序可以重复的, LinkedList是一个双向链表结构的。
3 特点来选择:对这个集合经常进行查找操 作,那么你最好用ArrayList;
经常增加,删除操作,那么最好用 LinkedList来存放。这些都是根据他的一个 特点来选择应用的。
ArrayList = Object[] + 线性表操作(增删改查) StringBuilder = char[] + 操作(增删改查)
HashMap中常用的方法有: put(),get(),clear(),containsKey()等 方法。 例如: HashMap map = new HashMap();// 实例化一个HashMap对象 map.put();//在map集合中添加元素
Java泛型简介 1) Java5 以后提出的语法现象, 在
散列值相同的元素的"线性集合"
4 加载因子: 就是散列数组加载率, 一般小于75%性能 比较理想
就是:元素数量/散列数组大小, 如: 7/10=70%
5 散列查找: 根据Key计算散列值, 根据散列值(下标找 到散列桶,在散列桶中顺序比较Key, 如果一样, 就返回 value
6 散列表中Key不同, Value可以重复
集合框架图
。集合框架中的核心接口是: List接口、Set接口和Map接 口。List接口和Set接口都是 继承了Collection接口的, 而Map接口是单独存在的。
我们学了知识是拿来应用的,那么对 于初学者来说怎样才能很好地应用集 合框架呢!给我感受最深的,也是最 重要的,那就是要知道集合框架中各 个接口和实现类的特征和他们的方法。 如果知道了他们的特征和方法,那我 我们在应用中就能得心应手了。好, 下面就让我们一起学习集合框架中几 个常用的接口和实现类的特征:
元素
Collections 集合的工具类, Arrays 数 组的工具类
1) 排序(sort()), 二分查找 (binarySearch()), 打乱(shuffle()), 填 充(fill())等操作
例如: Collections .sort();
Collection和Collections
containsKey(Object key):查看当前散列 表中是否包含给定的key值
containsValue(Object value):查看当前散 列表中是否包含给定的value值
isEmpty():散列表有无元素
keySet():返回当前散列表中所有的key(以
Set集合返回)
remove(Object key):根据key值删除这一 项
列值(不可见)排序 5) 默认的容量: 16 默认加载因子(加载率)
0.75 6) 根据key检索查找value值 7) 用于查找场合, 可以提高根据key查找效率
put(Object key,Object value):根 据给定key值存放value值
get(Object key):根据给定的key值 查找并返回对应的value值若没有 找到对应的key,返回null clear():清空散列表
java中的包装类
1) 包装类可以把基本类型包装为对象类型
2) 有八种包装类
int
Integer
long
Long
byte
Byte
short Short
float
Float
double Double
boolean Boolean
char
Character
3 包装类提供了 对应数据类型的工具方法 Integer.toHexString() Integer.toString(int) Integer.toBinaryString() Integer.parseInt(String) "3f"->int Integer.parstInt(String, int)
size():返回当前散列表中的元素总数
例如: HashMap map = new HashMap();// 实例化一个HashMap对象 map.put();//在map集合中添加元素
8) HashMap VS Hashtable A HashMap 新, 非线程安全, 不检查锁, 快
B Hashtable 旧 (1.2以前) 线程安全, 检查 锁, 慢一点