Java常见的几种集合类
一、前言
集合类是Java数据结构的实现。它是java.util包中的重要内容,允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。
二、Java集合类框架图
三、Java集合类型
Java集合框架主要包括两种类型的容器,一种是集合(Collection),另一种是图(Map)。
一、Collection接口
Collction接口有三种类型,分别是List,Set和Queue;
List常用的实现类ArrayList、LinkedList、Vector;
Set常用的实现类TreeSet、HashSet、LinkedHashSet;
1.List
List接口扩展自Collection,它可以定义一个允许重复的有序集合,用数组存储元素,可以插入多个null元素,同时它增加了面向位置的操作,允许在指定位置上操作元素,也就是建立了索引,可以用for进行循环遍历。
1.1ArrayList
ArrayList用数组存储元素,数组容量可动态扩建,如果元素个数超过了数组的容量,会自动进行扩容(扩容机制原理);
ArrayList是线程不安全的集合(ArrayList线程不安全底层原理);
1.2LinkedList
LinkedList用链表存储元素,链表和数组最大的区别在于它们对元素的存储方式的不同,导致它们在对数据进行操作时,效率也会不同;
PS:数组元素增删慢,查找快,而链表却相反,增删快,查找慢(数组连续内存空间,查找速度快,增删慢;链表充分利用了内存,存储空间是不连续的,首尾存储上下一个节点的信息,所以寻址麻烦,查找速度慢,但是增删快);数组和链表的区别
1.3Vector
Vector用数组存储元素,容量能够动态的增长,它的很多实现方法都加入了同步语句,因此是线程相对安全的;(Vector是相对安全的线程)
2.Set
Set接口扩展子Collection,它是不允许存储重复元素的无序集合,只允许一个null元素,不具备索引,因此不可以用普通for循环遍历(可以用强for循环和迭代器)底层数据结构采用的是哈希表
PS:这里的无序指的是存入和取出的顺序不一致,取出的时候会根据存入数据的属性进行排序
哈希表=数组+链表(如果链表长度超过8,自动转换为红黑树)
2.1TreeSet
TreeSet扩展自AbstractSet,它是一个有序的Set集合,通过TreeMap实现(TreeSet的实现)
2.2HashSet
HashSet是一个用于实现Set接口的具体类,通过散列法的机制来存储信息,元素并没有以某种特定顺序存放,底层是HashMap;
2.3LinkedHashSet
LinkedHashSet是用一个链表来扩展HashSet类,以元素插入的顺序来维护集合的链表,允许以插入的顺序在集合中迭代,底层是HashMap;
二、Map接口
Map接口有两种类型,分别是HashMap和TreeMap;
常用的实现类有HashMap、LinkedHashMap、TreeMap;
1.HashMap
HashMap是基于哈希表的Map接口的非同步实现的双列的无序集合,元素以key-values形式存储,它根据键的hashCode值存储数据,根据键可以获取值,具有很快的访问速度,同时,key不可以重复,因此最多只允许一条记录的key为null,底层数据结构是哈希表(HashMap底层原理);
1.1LinkedHashMap
LinkedHashMap继承自HashMap,它主要是用链表实现来扩展HashMap类,因此它是有序的HashMap(LinkedHashMap底层原理);
2.TreeMap
TreeMap基于红黑树数据结构的实现,实现SortMap,能够把它保存的记录根据键排序,也可以指定排序的比较器(键值使用Comparable或Comparator接口来排序),当用Iterator遍历TreeMap时,得到的记录是排过序的,同时不允许key值为空,非同步的;
四、集合类型的线程安全性
线程安全的集合:Vector、Hashtable;
线程不安全的集合:ArrayList、TreeSet、HashSet、LinkedHashSet、HashMap、LinkedHashMap、TreeMap;
PS:高并发的情况下,使用线程不安全的集合,容易抛出ConcurrentModificationException异常;
一、如何解决集合的线程不安全问题;
java中的JUC为我们提供了一些解决并发问题的工具类;
ArrayList转换为线程安全的类,使用:CopyOnWriteArrayList(实现线程安全的原理);
Set转换为线程安全的类,使用:CopyOnWriteArraySet(实现线程安全的原理);
Map转换为线程安全的类,使用: ConcurrentHashMap(实现线程安全的原理);
PS:也可以使用Arrays、Collections集合工具类;
五、Java的多线程和锁机制
参考:Java的多线程和锁机制
Java常见的几种集合类相关推荐
- Java常见的几种内存溢出及解决方法
Java常见的几种内存溢出及解决方法[情况一]: java.lang.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,一个原因是真不够(如递归的层数太多等),另 ...
- Java常见的5种线程池
在开发过程中我们常常需要使用到多线程来提高我们代码处理某些任务的效率,最基本的两种创建多线程的方式分别是继承Thread类和实现Runnable接口.但是创建线程和销毁线程的系统开销比较大,而且过多的 ...
- Java常见的几种排序算法-插入、选择、冒泡、快排、堆排等
本文就是介绍一些常见的排序算法.排序是一个非常常见的应用场景,很多时候,我们需要根据自己需要排序的数据类型,来自定义排序算法,但是,在这里,我们只介绍这些基础排序算法,包括:插入排序.选择排序.冒泡排 ...
- Java常见的几种设计模式
单例模式 指一个应用程序中,某个类的实例对象只有一个,你没有办法去new,因为构造器是被private修饰的,一般通过getInstance()的方法来获取它们的实例. getInstance()的返 ...
- Java常见的几种字符串截取方式
文章目录 通过subString()方法来进行字符串截取,返回字符串的子字符串 通过StringUtils提供的方法 split()+正则表达式来进行截取,将字符串按照分割符截取,以数组形式返回 通过 ...
- java 常见几种发送http请求案例
java 常见几种发送http请求案例 直接换成CloseableHttpClient还不行,需要这样使用CloseableHttpClient httpClient = HttpClientBuil ...
- java runtime shell_java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现...
Runtime.getRuntime().exec()执行JVM之外的程序:常见的几种陷阱 前言 日常java开发中,有时需要通过java运行其它应用功程序,比如shell命令等.jdk的Runtim ...
- java中常见的几种内部类,你会几个?(未完)
点击上方蓝色关注我们! 大家好,我是雄雄,今天给大家介绍的是java中的几种内部类. java中常见的几个内部类,你会几个?我会四个! 在看每个新知识点时,我们不禁有这样或者那样的疑问,比如它是什么? ...
- Java数组去重的多种方法,[Java教程]JavaScript常见的五种数组去重的方式
[Java教程]JavaScript常见的五种数组去重的方式 0 2016-12-14 15:00:17 ▓▓▓▓▓▓ 大致介绍 JavaScript的数组去重问题在许多面试中都会遇到,现在做个总结 ...
最新文章
- iOS: 转载CoreData数据库框架
- 使用FastJson解析时有关内部类的两个问题
- html 滚动条处于页面底部,滚动条一直置于页面底部,开发聊天程序须知。
- ylbtech_dbs_article_五大主流数据库模型
- Proxmark3 Easy Gui 4.0 5.0 5.1加强版 PM3GUI_X稳定优化版
- (转)在NGUI使用图片文字(数字、美术字)(直接可用于UILable)
- 357.计算各个位数不同的数字个数
- assert断言的概念
- JAVA代码查错试题集
- 基于微信小程序计算机基础答疑系统设计与实现
- 变色龙安装苹果系统的步骤(学习笔记)
- matlab 合成t检验,[zz]用MATLAB做T检验(ttest)
- 详细且通俗讲解轻量级神经网络——MobileNets【V1、V2、V3】
- 用project做项目计划及总结报表
- 如何利用 XMind 高效学习?
- Linux下rar和unrar命令的安装使用
- yoyo跑_全力冲刺 目标YOYO(图)
- 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作
- FreeBSD:从内核获取其他进程的pid及cpu占用率
- [模型]多目标规划模型
热门文章
- floor函数 和 ceil函数、fix函数、round函数
- 实习期第一次进项目的体会
- Flutter 多语言支持(Flutter Intl Plugin)
- deepin认证接口
- das nas san rain2.0+
- Airtest手机APP自动化--操作微信(小米11)
- Multi-Modal 3D Object Detection in Autonomous Driving: a Survey(自动驾驶中的多模态3D目标检测综述)论文笔记
- HMM和N-gram、贝叶斯网络的区别
- 聊聊SpringAOP和自定义注解的通用性
- 视频号7天销售额超百万