Java十分钟精通集合的使用与原理上篇

什么是集合?

比如我们去买超市买很多东西,我们不可能拿一样就去收银台,我们可能是先放到购物车内,然后再统一处理,所以购物车相当于一个容器,可以装很多东西,在Java中的集合也是相当于一个容器,可以装很多数据。

集合继承关系图:

Java十分钟精通集合的使用与原理上篇_第1张图片

Java十分钟精通集合的使用与原理上篇_第2张图片

Java十分钟精通集合的使用与原理上篇_第3张图片

但是这张图太复杂了,我们看一张简便的:

Java十分钟精通集合的使用与原理上篇_第4张图片

集合分为Collection和Map两种体系

一、Collection接口:

collection 接口有 3 种子类型集合: List、Set 和 Queue,再下面是一些抽象类,最后是具体实现类,常用的有 ArrayList、LinkedList、HashSet等(常用的几类)

Queue这个接口平时不常用,这里就不进行介绍,主要介绍ArrayList和Set:

ArrayList:储存有序并且可以重复的对象

Set:储存无序并且不可以重复的对象

List分为ArrayList和LinkedList:

ArrayLis:底层是数组结构,储存有序并且可以重复的对象

LinkedList:底层是链表结构,储存有序并且可以重复的对象

Set下有HashSet这个实现类:

HashSet:存储不能重复的对象,如果重复了程序并不会出错,但是后面的内容会覆盖前面的重复的

二、Map接口下分为HashMap和TreeMap:

注意:Map类型的集合是以键值对的形式来储存(Key:Value),保持具有映射关系的数据,因此Map集合用来保存无序的 键值对形式的值。根据键key来获取到对应的值。学过Python的同学肯定知道字典,没错,Map的格式就是和Python中的字典一致,比如:

{red=红色, green=绿色, yellow=黄色}

HashSet的特点:

  • 无序
  • HashSet是以Hash算法来记录再内存中无序存储的对象的,速度更快.
  • HashSet不是线程同步的,非线程安全的.
  • HashSet可以存储null

Map分为:

  • HashMap
  • LinkedHashMap
  • HashTable
  • ConcurrentHashMap
  • EnumMap
  • TreeMap

LinkedHashMap

LinkedHashMap是以链表式存储的HashMap,并且是以Hash算法来获取hashcode的值来获取内存中的数 据,存储的顺序和读取的顺序一致。

HashTable

HashMap和HashTable的作用一样,都是无序的键值对形式存储,HashTable考虑线程安全,HashMap不考 虑线程安全。 凡是线程安全的效率没有非线程安全的高。

ConcurrentHashMap

也是和HashMap线程一样,但是它考虑线程安全。HashTable是采用给当前线程加锁实现线程安全, ConcurrentHashMap是采用分段锁机制来实现线程安全。

EnumMap

专门用来存储枚举的Map集合

TreeMap

TreetSet是SortSet接口的实现类,TreeSet可以保证元素处于排序状态再保存。它采用的是红黑树算法数 据结构来存储集合元素。TreeSet支持两种排序:

  • 自然排序和定制排序
  • 默认采用自然排序(在集合第二章介绍)

注意:如果是存储大量的数据,我们一般是不会用Map去存储。Map一般用于存储小量并且可以无序的键值对存储的数据。比如登录页面的用户名、密码等等。

集合总结:

  • 集合是用于存储对象并且可以无限扩容,可以以有序、无序、键值对形式来存储对象
  • List接口下都是存储有序的可重复的元素集合,ArrayList是以数组形式存储,LinkedList以链表式存储
  • 凡是以LinkedXXX都是双向链表式存储的集合,都是有序并按插入的顺序存储
  • 凡是以HashXXX是以哈希算法存储,无序不可重复,获取速度快
  • 凡是TreeXXX都是以红黑树算法排序后再存储,分自然排序和定制排序
  • 集合中插入的值都是引用类型,它会将基本类型自动装箱成包装类型再存储到集合中

Collections工具类:

注意:不要和Collection搞错咯,这个是加了个s,是一个工具类,它包含有各种有关集合操作的静态多态方法。此类不能实例化,集合可以使用 Collections来对数据进行排序等等很多方法,具体可看官方文档:

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collections.html

集合的文字内容比较多,类型也比较多,容易混淆,小应学长将在下一章对常见的集合类型进行代码演示。

到此这篇关于Java十分钟精通集合的使用与原理上篇的文章就介绍到这了,更多相关Java 集合内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

你可能感兴趣的:(Java十分钟精通集合的使用与原理上篇)