黑马程序员——集合
来源:互联网 发布:淘宝小类目产品 编辑:程序博客网 时间:2024/06/05 09:31
1.集合概述
Java集合像一个容器,可以把多个对象丢进容器中。为了保存数量不确定的数据,以及保存具有映射关系的数据,java提供了集合类。集合类只能保存对象。Java集合主要有Set,List,Queue和Map四种体系,Set代表无序的,不可重复集合。List代表有序、重复的集合;Map代表具有映射关系的集合,Queue代表一种队列集合。
2.集合和数组的不同
数组长度固定,而集合长度是可变的
数组值可以存储对象,还可以存储基本数据类型;而集合只能存储对象
数组存储数据类型是固定的,而集合存储的数据类型不固定
3.集合的特点
集合只能存储对象
集合的长度是可变的
集合可以存储不同类型的对象
4.集合框架
(1)List常见子类对象
ArrayList:底层数据结构是数组结构,查询速度快,增删速度慢,线程不同步
LinkedList:底层是链表结构,增删速度快,相对的查询速度较慢
Vector:底层数据结构是数组,和ArrayList用法相同,但被ArrayList代替了,线程不同步
(2)Set常见子类对象
HashSet:底层数据结构是哈希表、存取速度快、元素唯一、线程不同步。
TreeSet:底层数据结构式二叉树。可以对Set集合中的元素进行排序。元素有序、线程不 同步。
(3)Map常见子类对象:
HashTable:底层是哈希表数据结构;不可以使用null键和null值;用作键的对象必须实 现hashCode和equals方法来保证键的唯一性线程同步,效率低
HashMap:底层是哈希表数据结构;允许使用null键和null值;线程不同步,效率高;保 证元素唯一性的:
TreeMap:底层是二叉树结构;允许使用null键和null值;线程不同步;
5.TreeSet的排序方式
(1)让元素自身具有比较性,元素需要实现Comparable接口,覆盖compareTo方法,这种方式也称为元素的自然顺序,或者叫默认顺序
代码事例:
(2)当元素自身不具备比较性时,或者具备的比较性不是想要的,这时需要让集合自身具备比较性,在集合初始化时就具备了比较性,定义一个比较器,在创建集合时将该比较器作为参数传入,该比较器实现Comparator接口,覆盖compare方法。
代码事例:
集合类各种容器的使用注意细节:
(1)迭代器:
迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。
也就是在迭代循环中调用一次next方法一次就要hasNext判断一次,比如语句
sop(it.next()+"..."+it.next())会发生上述异常。
迭代器的next方法返回值类型是Object,所以要记得类型转换,应用泛型后就不用强转
(2)List集合:
List集合里面的元素因为是带角标,所以List集合里面的元素都是有序的,
另外List集合可以包含重复元素,也可以包含null。
List集合有迭代器Iterator,还有一个特有迭代器列表ListIterator
List集合中判断元素是否相同都是用equals方法,无论contains、remove都依赖equals方法
比如往ArrayList集合里面存放学生,同名同年龄视为同一个人,此时就需要在学生类复写Object类里面的equals方法
(3)Set集合:
Set接口里面存放的是元素是无序的,不可以有重复元素,可以包含null
Set集合只有一种取出方式,就是迭代器Iterator
Set集合功能和Collection是一致的,没有特殊方法
|HashSet:
集合里面存放的元素是无序的,唯一的
底层数据结构是哈希表,哈希表结构的数据都是无序的,哈希表结构的操作效率都高效
线程不同步
保证元素唯一性的原理是:通过复写hashCode和equals方法
如果两元素的hashCode值相同,则继续判断两元素equals是否为真
如果两元素的hashCode值不同,则不会调用equals方法。
当我们往HashSet集合存放自定义的元素时(比如学生对象),通常都要复写hashCode和equals方法,
而且hashCode和equals方法不通过我们调用,HashSet集合底层内部自己调用,自己拿元素去比较
TreeSet
TreeSet集合可以对存放的元素进行排序,弥补了Set集合元素无序的缺点,且元素是唯一的
底层数据结构是二叉树,二叉树结构都是有序的
线程不同步
TreeSet集合要求往集合里存放的元素自身具备比较性,否则会报错
TreeSet集合保证元素唯一性的依据是:通过compareTo或者compare方法中的来保证元素的唯一性。
TreeSet排序的第一种方式:让元素自身具备比较性,
定义元素类实现Compareble接口,覆盖compare方法,
此方式是元素的自然顺序。
TreeSet排序的第二种方式:让集合具备比较性
当元素自身不具备比较性或者具备的比较性不是
我们所需要的比较性时,此时就需要让集合具备自定义的比较性。
那如何让集合自身具备比较性呢?
可在集合初始化时,就让集合具备比较方式。
即定义一个类,实现Comparator接口,覆盖compare方法。
注:
判断元素唯一时,当主要条件一样时,判断次要条件
两种排序方式都在时,以比较器为主!!!
(4)Map集合:
Hashtable
底层是哈希表结构
线程安全的,并且键和值不能为null。
HashMap
底层是哈希表结构
线程不安全的,键和值可以为null。
LinkedHashMap
底层是链表和哈希表
线程不安全
|TreeMap
底层是二叉树
线程不安全的
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员—集合
- 黑马程序员——集合
- 黑马程序员——集合
- 黑马程序员——集合
- 黑马程序员——集合
- 黑马程序员——集合
- 黑马程序员——集合
- 黑马程序员——集合
- 黑马程序员——集合
- 黑马程序员——集合
- 黑马程序员——集合
- Uva11520 - Fill the Square
- 跟着实例学习设计模式(3)-工厂方法(创建型)
- 快速使用STVP和ST-LINK下载STM8S003程序
- 寻找回文数的python的实现
- 设计模式 Singleton 单例 懒汉,线程安全
- 黑马程序员——集合
- (4)全e化的基礎OLTP-POS系統-1
- Haskell趣学指南学习日记(3)
- CF3B 贪心
- LA3635 - Pie
- LeetCode Maximal Square
- Photoshop CS6快捷键大全
- linux程序设计——如何实现popen(第十三章)
- 第一次写博客