黑马程序员--java基础--集合

一:集合类概述

为什么出现集合类?

因为java语言是面向对象的语言,在java中,万事万物都可以用对象来描述,所以为了方便对多个对象进行操作,java就提供了集合类.简单来说,集合其实就是存储对象的容器.那么集合是容器,数组也是容器,它们两个有什么区别呢?

集合和数组的区别

第一:集合中只能存储对象,基本数据类型是不可以存储进去的,而数组可以存储基本数据类型,也可以存储引用数据类型;

第二:数组一旦创建完成,长度是不发生改变的,而集合长度可以在创建完成后改变;

第三:数组中只能存储同一种类型的数据,而集合却可以存储多种数据类型.

二:Collection接口

Collection层次结构的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如SetList)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

我们在学习java的时候,学习顶层接口的方法,使用底层的类来实现,因为顶层接口中包含着他们的共性方法,便于我们记忆,而底层实现类除了具有这些共性方法外,还有自己特有的方法.

Collection接口的两个子接口:List(列表)和Set(集)

二者区别: 

List中的元素有索引值,而Set没有;

List允许存储重复元素,而Set不允许存储重复元素;

List是一个有序的集合,怎么存怎么取,而Set存放和取出的顺序不一定相同;

List的三个子类实现:

ArrayList

 |-- 底层可变数组实现
 |-- 默认10个位置,每次增长50%
 |-- 线程不安全集合,运行速度快
 |-- 查询快,增删慢

Vector(不常用)
 |-- 底层可变数组实现
 |-- 默认10个位置,增长100%
 |-- 线程安全集合,运行速度慢
 |-- 查询快,增删慢

LinkedList
 |-- 底层链表实现,对象地址记录
 |-- 线程不安全集合,运行速度快
 |-- 查询慢,增删快

Set的两个子类实现

HashSet
   |-- 底层哈希表结构(链表数组)
   |-- 存取速度快
   |-- 线程不安全集合,运行速度快
TreeSet
   |-- 底层红黑树
   |-- 对存储的对象进行自然顺序的排序
   |-- 线程不安全集合,运行速度快

TreeSet实现排序有两种方式,一种是依靠对象自身的排序功能,也叫做自然排序,需要对象所属的类实现Comparable接口,并重写compareTo方法

另一种是依靠比较器进行排序(集合自身具备比较性),   将比较器对象,传递到TreeSet集合构造方法中,集合完全利用比较器进行排序,实现比较器是通过定义类,实现java.util.Comparator,重写compare方法来完成的.

三:Map

集合一次存储两个对象,一个叫键,一个叫值, 键值对映射存储集合,不允许重复键,每个键映射一个值
HashMap
   |-- 底层哈希表
   |-- 线程不安全集合,运行速度快
   |-- 允许null值,null键
   |-- 存储键实现hashCode equals方法
TreeMap
   |-- 底层红黑树结构
   |-- 存储的键排序
   |-- 线程不安全集合,运行速度快

TreeMap实现排序的方式:(和TreeSet几乎一样)
第一种:依靠对象自身的排序功能,也叫做自然排序,需要对象所属的类实现Comparable接口,并重写compareTo方法

第二种: 依靠比较器进行排序(集合自身具备比较性),   将比较器对象,传递到TreeSet集合构造方法中,集合完全利用比较器进行排序,实现比较器是通过定义类,实现java.util.Comparator,重写compare方法来完成.
Hashtable(几乎不用)
   |-- 底层哈希表
   |-- 线程安全集合,运行速度慢
   |-- 不允许null值,null键
   |-- 存储键实现hashCode equals方法
Properties(Hashtable的子类,比Hashtable应用要广泛)
特有的两个方法
   |-- setProperty(字符串,字符串)  相当于Map方法put,但是只能传递String类型
   |-- 字符串 getProperty(字符串)  相当于Map方法get,但是也只能传递String类型
Collections
Collection集合的工具类,提供了对集合的一些操作,类似于数组Array和Arrays的关系,Collections可以对集合进行排序,反转,查找的等操作.

四:关于集合的其他知识

泛型
泛型是为了解决程序中的安全问题而引入的一种安全机制,让集合中只能存储指定的数据类型,将安全隐患由运行时期提前到编译时期
增强for
简化for循环

格式 

for(数据类型 变量:集合){

}

可变参数

当一个方法中,参数类型一致,可是个数不确定时,可以使用可变参数

书写格式: 方法名(数据类型..变量名)
注意事项
    |-- 只能写一个可变参数
    |-- 写在参数最后

一:集合类概述

为什么出现集合类?

因为java语言是面向对象的语言,在java中,万事万物都可以用对象来描述,所以为了方便对多个对象进行操作,java就提供了集合类.简单来说,集合其实就是存储对象的容器.那么集合是容器,数组也是容器,它们两个有什么区别呢?

集合和数组的区别

第一:集合中只能存储对象,基本数据类型是不可以存储进去的,而数组可以存储基本数据类型,也可以存储引用数据类型;

第二:数组一旦创建完成,长度是不发生改变的,而集合长度可以在创建完成后改变;

第三:数组中只能存储同一种类型的数据,而集合却可以存储多种数据类型.

二:Collection接口

Collection层次结构的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如SetList)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

我们在学习java的时候,学习顶层接口的方法,使用底层的类来实现,因为顶层接口中包含着他们的共性方法,便于我们记忆,而底层实现类除了具有这些共性方法外,还有自己特有的方法.

Collection接口的两个子接口:List(列表)和Set(集)

二者区别: 

List中的元素有索引值,而Set没有;

List允许存储重复元素,而Set不允许存储重复元素;

List是一个有序的集合,怎么存怎么取,而Set存放和取出的顺序不一定相同;

List的三个子类实现:

ArrayList

 |-- 底层可变数组实现
 |-- 默认10个位置,每次增长50%
 |-- 线程不安全集合,运行速度快
 |-- 查询快,增删慢

Vector(不常用)
 |-- 底层可变数组实现
 |-- 默认10个位置,增长100%
 |-- 线程安全集合,运行速度慢
 |-- 查询快,增删慢

LinkedList
 |-- 底层链表实现,对象地址记录
 |-- 线程不安全集合,运行速度快
 |-- 查询慢,增删快

Set的两个子类实现

HashSet
   |-- 底层哈希表结构(链表数组)
   |-- 存取速度快
   |-- 线程不安全集合,运行速度快
TreeSet
   |-- 底层红黑树
   |-- 对存储的对象进行自然顺序的排序
   |-- 线程不安全集合,运行速度快

TreeSet实现排序有两种方式,一种是依靠对象自身的排序功能,也叫做自然排序,需要对象所属的类实现Comparable接口,并重写compareTo方法

另一种是依靠比较器进行排序(集合自身具备比较性),   将比较器对象,传递到TreeSet集合构造方法中,集合完全利用比较器进行排序,实现比较器是通过定义类,实现java.util.Comparator,重写compare方法来完成的.

三:Map

集合一次存储两个对象,一个叫键,一个叫值, 键值对映射存储集合,不允许重复键,每个键映射一个值
HashMap
   |-- 底层哈希表
   |-- 线程不安全集合,运行速度快
   |-- 允许null值,null键
   |-- 存储键实现hashCode equals方法
TreeMap
   |-- 底层红黑树结构
   |-- 存储的键排序
   |-- 线程不安全集合,运行速度快

TreeMap实现排序的方式:(和TreeSet几乎一样)
第一种:依靠对象自身的排序功能,也叫做自然排序,需要对象所属的类实现Comparable接口,并重写compareTo方法

第二种: 依靠比较器进行排序(集合自身具备比较性),   将比较器对象,传递到TreeSet集合构造方法中,集合完全利用比较器进行排序,实现比较器是通过定义类,实现java.util.Comparator,重写compare方法来完成.
Hashtable(几乎不用)
   |-- 底层哈希表
   |-- 线程安全集合,运行速度慢
   |-- 不允许null值,null键
   |-- 存储键实现hashCode equals方法
Properties(Hashtable的子类,比Hashtable应用要广泛)
特有的两个方法
   |-- setProperty(字符串,字符串)  相当于Map方法put,但是只能传递String类型
   |-- 字符串 getProperty(字符串)  相当于Map方法get,但是也只能传递String类型
Collections
Collection集合的工具类,提供了对集合的一些操作,类似于数组Array和Arrays的关系,Collections可以对集合进行排序,反转,查找的等操作.

四:关于集合的其他知识

泛型
泛型是为了解决程序中的安全问题而引入的一种安全机制,让集合中只能存储指定的数据类型,将安全隐患由运行时期提前到编译时期
增强for
简化for循环

格式 

for(数据类型 变量:集合){

}

可变参数

当一个方法中,参数类型一致,可是个数不确定时,可以使用可变参数

书写格式: 方法名(数据类型..变量名)
注意事项
    |-- 只能写一个可变参数
    |-- 写在参数最后

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值