常用java集合类

1 Java集合简介

Java是一门面向对象的语言,就免不了处理对象,为了方便操作多个对象,那么我们就得把这多个对象存储起来,想要存储多个对象(变量),很容易就能想到一个容器(集合)来装载

简单来说集合就是“由若干个确定的元素所构成的整体”。就是Java给我们提供了工具方便我们去操作多个Java对象。

1.集合只能存放对象。比如你存入一个int型数据66放入集合中,其实它是自动转换成Integer类后存入的,Java中每一种基本数据类型都有对应的引用类型。
2.集合存放的都是对象的引用,而非对象本身。所以我们称集合中的对象就是集合中对象的引用。对象本身还是放在堆内存中。
3.集合可以存放不同类型,不限数量的数据类型。

2 集合框架图

在这里插入图片描述
在这里插入图片描述
Java集合框架主要包括两种类型的容器,一种是集合(Collection),另一种是图(Map)。Collection接口又有3种子类型,List、Set和Queue,再下面是一些抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap等等。Map常用的有HashMap,LinkedHashMap等。
更详细的框架图
在这里插入图片描述

3 Collection接口

3.1 List

List 接口:元素按进入先后有序保存,可重复
ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
Vector 接口实现类, 数组, 同步, 线程安全(Stack 是Vector类的实现类)

3.2 Set

Set 接口: 仅接收一次,不可重复,并做内部排序
Set接口扩展自Collection,它与List的不同之处在于,规定Set的实例不包含重复的元素。
HashSet 使用hash表(数组)存储元素;不能保证元素的顺序;影响哈希冲突的条件,首先看哈希值是否相等,然后判断equals是否相等(内容是否相等)
LinkedHashSet 链表维护元素的插入次序,底层数据结构由哈希表和链表组成
TreeSet 底层数据结构是红黑树(是一个自平衡的二叉树),保证元素的排序方式(自然排序),实现Comparable接口

3.3 Queue

队列是一种先进先出的数据结构,元素在队列末尾添加,在队列头部删除。Queue接口扩展自Collection,并提供插入、提取、检验等操作。

常见面试题

Arraylist,LinkedList,Vector的区别
在这里插入图片描述
数组和集合的区别:
1:长度的区别
数组的长度固定
集合的长度可变

2:内容不容
数组存储的是同一种类型的元素
集合可以存储不同类型的元素(但是一般我们不这样干…)

3:元素的数据类型
数组可以存储基本数据类型,也可以存储引用类型
集合只能存储引用类型(你存储的是简单的int,它会自动装箱成Integer)

4 Map接口

Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。

4.1 HashMap

在之前的版本中,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当链表中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。
在这里插入图片描述

4.2 LinkedHashMap

LinkedHashMap继承自HashMap,它主要是用链表实现来扩展HashMap类,HashMap中条目是没有顺序的,但是在LinkedHashMap中元素既可以按照它们插入图的顺序排序,也可以按它们最后一次被访问的顺序排序。

4.3 TreeMap

TreeMap基于红黑树数据结构的实现,键值可以使用Comparable或Comparator接口来排序。TreeMap继承自AbstractMap,同时实现了接口NavigableMap,而接口NavigableMap则继承自SortedMap。SortedMap是Map的子接口,使用它可以确保图中的条目是排好序的。

在实际使用中,如果更新图时不需要保持图中元素的顺序,就使用HashMap,如果需要保持图中元素的插入顺序或者访问顺序,就使用LinkedHashMap,如果需要使图按照键值排序,就使用TreeMap。

4.4 ConcurrentHashMap

Concurrent,并发,从名字就可以看出来ConcurrentHashMap是HashMap的线程安全版。同HashMap相比,ConcurrentHashMap不仅保证了访问的线程安全性,而且在效率上与HashTable相比,也有较大的提高。

常见面试题
HashMap、HashTable的区别
HashMap线程不安全;HashTable线程安全
HashMap中key可以为null,但是这样的key只能有一个;HashTable的key和value都不能为null
初始容量大小和每次扩容大小不同
计算hash值的方法不同
在这里插入图片描述

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值