java集合类

  1. 什么是集合?

我的个人理解是:集合其实是一种面向对象思想语言的数组,但它们之间又有着许多不同,集合不像数组那样长度固定,集合的长度是不需要在声明时定义的,它的长度会根据我们放入的对象多少而改变。集合是一种引用类型,在java中针对不同的应用场景有着不同的更为适合的集合类型。

  1. 集合的类图

这是java集合类的官方文档类图,而我们学习的类型其实并没有这么可怕。

这张类图是我们需要深入学习的Java集合类

接下来我们自顶而下从左到右的一个个介绍集合类型。

  1. Iterator

iterator是集合的顶层接口,它并不是不是一个具体的类,实现了它的类具备iterator()方法会返回一个迭代类,实现了该接口的类可以使用foreach进行遍历。

  1. Collection

collection接口同样是一个接口,它是一个基本集合类接口,collection接口中定义了基本的集合应该具备的方法。

  • boolean add(E e)方法

add方法是集合的添加方法,返回值是一个boolean类型,将参数添加进集合中默认至集合末尾。

  • boolean addAll(Collection collection)方法

addAll方法见名知意那就是添加所有的意思,它的返回值类型也是一个boolean类型,而参数是集合类型。该方法会将参数集合中的所有元素添加到新的集合中。

  • boolean remove(Object object)方法

remove方法返回值是boolean类型,参数是一个对象类型,remove方法会将集合中的该对象删除,若集合中有多个该对象时会将所有匹配的对象全部删除。

  • boolean removeAll(Collection collection)方法

removeAll方法同addAll方法一样,返回值是boolean类型,参数是一个Collection类型,该方法会将参数集合中的所有元素在调用方法的集合中进行匹配,之后删除所有匹配的元素。

  • void clear()方法

clear方法是一个清空方法,没有返回值没有参数,会直接将调用集合直接清空可理解为初始化。

  • boolean contains(Object object)方法

contains方法返回值是boolean类型,参数是对象类型,调用该方法时会在调用集合中寻找参数对象,若存在返回true若不存在返回false

  • boolean isEmpty()方法

isEmpty方法返回值是boolean类型,方法判断调用集合中是否为空,是返回true,否返回false

  • int size()方法

size方法返回值类型为int型,该方法会返回调用集合中的元素总数。

  • Object[] toArray()方法

toArray方法返回值类型为Object类的数组,该方法可以将集合转换成数组返回。

  1. Set

  • set接口继承自collection接口set接口的特点是一种无序不可重复的集合类型,而这里的set并不是一种实现类,同样的它也只是一个接口。

  • set集合取出的顺序和存入的顺序无关,并且set集合中不存在下标

  1. HashSet

  • HashSet底层结构是哈希表,哈希表是哈希算法支持的。哈希算法就是JDK根据对象地址或字符串或数值计算出的一个整数类型的数据。

  • 拥有Set集合的特点,内容不重复,读取顺序和存入顺序无关。

  • 线程不安全。

  1. LinkedHashSet

  • 底层是哈希表链表实现的。

  • 元素是有序的。

  • 元素不可重复。

  • 线程不安全。

  1. TreeSet

  • 底层通过TreeMap实现,是一个二叉树。

  • 元素无序不可重复。

  • 可按照元素的大小顺序自动排序。

  • 线程不安全。

  1. List

list接口继承自collection接口,它是一种有序可重复的集合类型,list并不是实现类而是一个接口。

list集合有下标

  1. ArrayList

  • 底层是一个数组,默认初始化长度是10.

  • 插入删除的效率低,读取遍历效率高。

  • 线程不安全

  • 使用add方法时候可以传入下标将值插入到指定位置。

  • 元素存放位置可通过首元素位置和元素内存大小计算

  • 元素内存空间大小相同,内存地址连续的。

add(int index, Object object)
  1. LinkedList

  • 底层通过双向链表实现。

  • 插入删除效率高,遍历效率低

  • 线程不安全。

  1. Vector

  • 底层通过数组实现.

  • 初始容量是10

  • 所有的方法都是线程同步的,都带有synchronized关键字。

  • 线程安全。

  1. Map

map接口是也是一种集合类型,map类型和set、list有很大的区别,map类型是以一种键值对keyvalue的形式存放的,一般我们把要存的元素放入value中,给它起一个对应的key值,每次需要使用时通过key值来取。

  • put方法

void put(k key, V value)//设置键值对

void remove(Object key)//删除元素

void clear()//清空集合

boolean containsKey(Object key)//判断键是否存在,存在返回true

boolean containsValue(Object value)//判断值是否存在,存在返回true

boolean isEmpty()//判断集合是否为空

int size()//获取集合元素个数
  1. HashMap

  • 键值对形式,键唯一值不唯一。

  • 底层基于哈希表,哈希表就是数组链表

  • 线程不安全。

  • 初始化容量是16当集合容量达到初始化的百分之七十五时,数组变为二叉树开始扩容。

  1. HashTable

  • 底层通过数组加链表。

  • 链表解决哈希冲突。

  • 线程安全。

  1. TreeMap

  • 底层是红黑树

  • 平衡排序的二叉树

  1. 如果要使用线程安全的集合怎办?

  1. 使用Vector集合。

  1. 使用HashTable集合。

  1. 使用Collections包中的工具类使线程不安全的集合变为线程安全的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值