一篇文章让你搞懂Java集合

186 阅读2分钟

为什么会出现集合

在Java中有数组的概念,数组可以用来存放一组数据,但是数组一旦创建,它的大小就是固定的,所带来的问题是要么存储空间不够,要么就是存储空间太大而浪费。与数组相比,集合可以动态增长,但是集合只能存放引用数据类型,即为对象的引用,为内存地址,不能存放int、long、float、double等基础类型的数据。

简单介绍一下数组,数组可以存储基本数据类型,也可以存储引用数据类型。其中基本数据类型包括:byte、short、int、long、float、double、char、boolean;引用类型指的是:Java为每种基本数据类型提供了对应的封装类型,分别是Byte、Short、Integer、Long、Float、Double、Character、Boolean。

集合框架和适用场景

Java集合主要由两大接口派生而来;一个是Collection接口,主要用于存放单一元素;另外一个是Map接口,主要存放键值对元素,框架图如下:

Collection:

collection.png

Map:

Map.png

常用的集合实现类

ArrayList

  • 初始化时,默认大小为10,如果在add时数组已满,则会扩展为原来长度的1.5倍,然后将原来的数组赋值到新的数组中;
  • 线程不安全
  • 查询速度非常快,但是插入和删除慢
  • 常用方法:get(int index);add(E e);add(int index, E e);remove(Object o);sort();indexof()

LinkedList

  • 双向列表,随机访问效率低,但是随机插入和随机删除效率高
  • 使用场景:需要快速插入,删除
  • 常用方法:add(E e);add(int index, E e);addFirst(E e);addLast(E e);offer(E e);

Set

  • 为无序、不可重复的
  • HashSet
  • Set中最常用的,使用Hash表实现的,集合中的元素是无序的,可以有null值,但是不能有重复值
  • 底层为HashMap实现的,hashCode是通过对象的地址计算得出的
  • TreeSet
  • Set中第二用的,是二叉树结构实现的集合,不允许有null值,也不能有重复元素
  • 实现了sortedSet接口,可对元素进行自然排序;底层为TreeMap.

Map

  • 主要特点是键值对的形式,一个key对应一个value;常用的实现类有:
  • HashMap:底层数据结构是哈希表,线程不安全,效率高,hash表依赖两个方法hashCode()和equals()
  • LinkedHashMap:底层数据结构由链表和哈希表组成,由链表保证元素有序,哈希表保证元素唯一
  • HashTable:底层数据结构是哈希表,线程安全,但是效率低
  • TreeMap:底层数据结构是红黑树(是一种自平衡的二叉树,根据比较的返回值是否为0来保证元素唯一性)

那么什么时候该用哪种集合类呢?

Collection Usage.PNG

码字不易,如果对您有用的话,请点个赞支持一下哈