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

目录
  • 什么是集合?
  • 集合分为Collection和Map两种体系
    • 一、Collection接口:
    • 二、Map接口下分为HashMap和TreeMap:
  • 集合总结:
  • Collections工具类:

什么是集合?

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

集合继承关系图:

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

集合分为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 集合内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

    List集合: ArrayList: 底层是数组结构,储存有序并且可以重复的对象 package SetTest; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ArrayListTest { public static void main(String[] args) { //创建ArrayList的对象 List<Integer> list = ne

  • Java集合框架之Stack Queue Deque使用详解刨析

    目录 1. Stack 1.1 介绍 1.2 常见方法 2. Queue 2.1 介绍 2.2 常见方法 3. Deque 3.1 介绍 3.2 常见方法 1. Stack 1.1 介绍 Stack 栈是 Vector 的一个子类,它实现了一个标准的后进先出的栈.它的底层是一个数组. 堆栈只定义了默认构造函数,用来创建一个空栈.堆栈除了包括由 Vector 定义的所有方法,也定义了自己的一些方法. 1.2 常见方法 方法 描述 E push(E item) 压栈 E pop() 出栈 E pee

  • Java使用list集合remove需要注意的事项(使用示例)

    目录 错误使用示例一: 解决方案一: 解决方案二: 错误使用示例二: 分析结果原因: 解决方案: 在实际开发中有时候会碰到这样的场景,需要将一个list集合中的某些特定的元素给删除掉,这个时候用可以用List提供的remove方法来实现需求. List中的remove方法传入的参数可以是集合的下标,也可以是集合中一个元素,也可以是一个集合. 错误使用示例一: 这里我使用的是增强for循环,会发现直接报错. List集合的一个特点是它其中的元素时有序的,也就是说元素的下标是根据插入的顺序来的,在删

  • java使用CollectionUtils工具类判断集合是否为空方式

    目录 使用CollectionUtils工具类判断集合是否为空 判断集合为空(List为null或size()==0) 判断集合不为空(List不为null且size()!=0) 判断集合是否为空底层 集合判断是否为空工具类(CollectionUtils) 工具类 方法 使用CollectionUtils工具类判断集合是否为空 判断集合为空(List为null或size()==0) 1.CollectionUtils.isEmpty(null): true 2.例:List<String>

  • Java集合框架之List ArrayList LinkedList使用详解刨析

    目录 1. List 1.1 List 的常见方法 1.2 代码示例 2. ArrayList 2.1 介绍 2.2 ArrayList 的构造方法 2.3 ArrayList 底层数组的大小 3. LinkedList 3.1 介绍 3.2 LinkedList 的构造方法 4. 练习题 5. 扑克牌小游戏 1. List 1.1 List 的常见方法 方法 描述 boolean add(E e) 尾插 e void add(int index, E element) 将 e 插入到 inde

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

    目录 什么是集合? 集合分为Collection和Map两种体系 一.Collection接口: 二.Map接口下分为HashMap和TreeMap: 集合总结: Collections工具类: 什么是集合? 比如我们去买超市买很多东西,我们不可能拿一样就去收银台,我们可能是先放到购物车内,然后再统一处理,所以购物车相当于一个容器,可以装很多东西,在Java中的集合也是相当于一个容器,可以装很多数据. 集合继承关系图: 但是这张图太复杂了,我们看一张简便的: 集合分为Collection和Map

  • Java十分钟精通接口的使用与原理

    何为接口? 官方解释: Java内的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 个人理解解释: 其实接口可以理解为一种特殊的类,这个类里面全部是由全局常量和**公共的抽象方法(需要重写)所组成.接口是解决Java无法使用多继承的一种手段.我们可以把接口理解为是一个100%的抽象类,既接口中的方法必须全部是抽象方法.反正接口里面都是方法,但是没有方法体,其他类实现这个接口后重

  • Java十分钟精通泛型的使用与原理

    什么是泛型? 简而言之:<>泛型就是用来约束类.方法.属性上的数据类型,比如 List<Integer> list = new ArrayList<Integer>(); new ArrayList这个集合的元素只能添加Integer类型. 为什么需要泛型? Java推出泛型之前,程序员可以构建一个Object类型的集合,该集合能够存储任何的数据类型,而在使用该 集合的时候,需要程序员明确知道每个元素的具体的类型并向下转型,否则容易引发ClassCastExceptio

  • Java十分钟精通包装类的使用与操作

    包装类 何为包装类? 基本类型包装类的概述: 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能方法操作该数据 包装类是将基本数据类型的值包装为Java中的对象,Java语言为8种基本数据类型分别提供了包装类 首先看一下八大数据类型的包装类: 包装类型出现的原因: 因为Java是一个面向对象的语言,基本类型并不具有对象的性质,为了与其他对象"接轨"就出现了包装类型,它相当于将基本类型"包装起来",使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本

  • Java十分钟精通Lambda表达式

    目录 1.简介 2.Lambda表达式的使用: 1.在普通方法内的使用 2.带参方法的使用 3.Lambda表达式实现多线程 4.Lambda表达式操作运算 5.Lambda表达式方法引用 6.Lambda表达式对集合的使用 3.总结 1.简介 首先Lambda表达式是属于Java8的 一个新特性,提供Java编程中对于函数式编程的支持,有助于代码的简洁,可以取代大半部分的匿名函数,尤其对于集合的遍历和集合的操作,极大的简化了代码. Lambda表达式的主体: 函数式接口: 注意: Lambda

  • Java十分钟精通反射机制原理

    什么是反射? 反射机制是在运行状态中,它为Java提供一种"操作对象"的能力,在运行状态下,通过Class文件对象,可以调用到任何类里面的属性.方法.以及构造方法,包括私有的,所有的类在反射机制面前都是透明的 自己的概括:通过Class文件对象可以看到这个类里面的所有东西,并且可以使用和修改 反射的前提是获取Class文件对象((字节码对象),那么一共有三种方式获取: Class.forName("全类名") ----通过Class类的静态方法(最常用) 类名.cl

  • Java十分钟精通Log4j日志的使用

    目录 为什么要用日志? 下载: 详细步骤: 一.打开IDEA 二.创建日志对象 为什么要用日志? 我们知道,程序在运行过程中会产生很多很多信息,比如在几点几分的时候运行了,运行的结果是怎么样的?为了我们更加了解程序运行的情况,可以通过日志来查看,日志可以在控制台输出,也可以输出至指定的文件内,在下面的文章中具体的给大家介绍. 下载: Log4J是Apache公司的开源项目,用于日志处理.下载地址: https://logging.apache.org/log4j/2.x/download.htm

  • Java十分钟精通异常处理机制

    目录 异常处理机制的底层原理 异常的继承关系图 异常的处理 一.try-catch-finally结构 二.多catch处理不同的异常: 三.throws声明异常/throw抛出异常: 四.自定义异常: 五.常见的异常 异常处理机制的底层原理 抛出异常,在执行一个方法时,如果发送了异常,则这个方法生成代表该异常的一个对象,停止当前执行的 路径,并把异常提交给jre. 捕获异常:jre得到该异常后,虚招相应的代码来处理该异常.jre在方法的调用栈中查找,从生成异常的 方法开始回溯,直到找到相应的异

  • Java十分钟精通内部类的使用

    内部类: 其实内部类顾名思义,就是类中类,一个类里面还有一个类. 内部类分为四种: 普通内部类 静态内部类 方法内部类 匿名内部类 我们一一去了解一下~~ A.普通内部类: 我们先通过代码去了解一下: package InternalClass; /** * 内部类 */ public class Car { public int a = 10; public int b = 20; //外部类的方法 public void method() { System.out.println("我是外部

随机推荐