当前位置: 首页 > 图灵资讯 > 技术篇> 集合

集合

来源:图灵教育
时间:2023-06-15 09:32:04

含义

  1. 集合是Java API提供的一系列类别可用于动态存储多个对象 (集合只能存储对象)
  2. 集合和数组的区别在于,集合是大小可变的序列,只要是引用类型,元素类型就可以不受限制。(基本数据类型不能放在集合中,但包装类型可以放在基本数据类型中)
  3. 所有的集合类都支持泛型,这是一种数据安全的用法。
集合与数组不同

数组:一旦初始化后长度不变,元素类型有限(String类型的数组只能安装String数据),数组可以存储基本数据类型

集合:长度可变序列,元素类型不受限制(一个集合可以存储多个数据类型的元素),集合只能存储参考数据类型

collection家族

集合_数组

List接口

特点:有序且可重复(因为List界面添加了许多下标操作方法)

实现类:

  1. ArrayList
  2. LinkedList
  3. Vector
  4. Stack
Set接口

特点:无序且不可重复

实现类:

  1. HashSet
  2. LinkedHashSet
  3. TreeSet
Map家族

集合_Map_02

实现类:

  1. HashMap
  1. LinkedHashMap
  2. Hashtable
  3. ConcurrentHashMap
  4. TreeMap
  5. Properties
泛型

含义:数据安全的做法

泛型限定:

?任何类型的表示都可以

? extends A 这意味着元素必须是A或A的子类

? super A 表示元素必须是A类或A类的父类

迭代器

含义:遍历集合中的数据

分类:Iterator 和 ListIterator

Iterator 和 ListIterator 区别

Iterator :可以在Collection接口下获得所有实现类的迭代器,可以在遍历时删除元素

ListIterator :可以在List接口下获得的所有实现类迭代器都可以在遍历时删除(remove)、替换(set)、添加元素也可以指定下标开始遍历,也可以倒叙遍历

比较器接口

功能:排序时使用

分类:

内置比较器:Comparable - compareTo()

外置比较器:Comparator - compare()

使用场景:

内置比较器:如果对象想要存储Tresetetet:、在TreeMap中,必须实现对象所属类别的内置比较器

外置比较器:当内置比较规则不能满足当前需求,但不能改变内置比较规则时

优先级:外置比较器: > 内置比较器

注意
  1. Collection 与 Map的区别

Collection 存单值可以通过获取迭代器进行遍历

Map存两个值(Key-Value),不能获得迭代器,不能遍历(Map可以间接遍历)

  1. 理解为什么Set是无序的

无序:存储顺序与取出顺序不一致,无序不等于随机

  1. ArrayList 与 LinkedList的区别

使用上的差异:

LinkedList添加了

先进先出的队列模式(removeFirst())

栈模式-先进后出(removeLast())

效率差异:

ArrayList的底层数据结构是一维数组

LinkedList的底层数据结构是双向链表

添加 - 不扩容的情况:ArrayList快

添加 - 扩容:LinkedList快

删除:LinkedList快速

查询:ArrrayList快

修改:ArrrayList快

注:ArrayList在工作中很常用,因为很多需求都需要使用查询功能,ArrayList查询速度更快

  1. 各种集合应用场景

ArrayList:存储数据,线程不安全

LinkedList:队列模式、栈模式、线程不安全

Vector:弃用,线程安全

Stack:弃用,线程安全

HashSet:重+无序,线程不安全

LinkedHashSet:重+有序,线程不安全

TreeSet:排序,线程不安全

HashMap:存key+value,key去重,无序,线程不安全

LinkedHashMap:存key+value,key去重,有序,线程不安全

Hashtable:弃用,存key+value,key去重,无序,线程安全,方法加锁-效率低

ConcurrentHashMap:存key+value,key去重,无序,线程安全,局部锁定,CAS-效率高

TreeMap:存key+value,对Key进行排序

Properties:配置文件