Java集合相关知识点

2 篇文章 0 订阅
1 篇文章 0 订阅

一,什么是集合

java集合类存放在java.util包中,是一个用来存放对象的容器。
注意:

  1. 集合只能存放对象。
  2. 集合中存放的都是对象的引用,而非对象本身。所以我们称集合中的对象就是集合中对象的引用。对象本身还是存放在堆内存中。
  3. 集合可以存放不同的类型,不限数量的数据类型。

二,集合和数组(Array 和 ArrayList )的区别

  1. 数组长度是固定的,集合长度是可变的。
  2. 数组可以存储基本数据类型,也可以存储引用数据类型,集合只能存储引用数据类型。
  3. 数组存储的元素必须是同一个数据类型,集合存储的对象可以是不同数据类型的。

基本数数据类型和引用数据类型区别

在这里插入图片描述

八大基本类型

在这里插入图片描述

引用数据类型

类(class), 接口(interface),数组(array),(枚举类型、注解类型、字符串(String)类型) 。
简单来说,只要不是基本数据类型.都是引用数据类型。

三,常见的集合有哪些

Map接口和Collection接口上所有集合框架的父接口

  • Collection接口的子接口包括:Set接口和List接口。
  • Map接口的实现类主要有:HashMap,TreeMap,HashTable,ConcurrentHashMap,Properties等。
  • Set接口的实现类主要有:HashSet,TreeSet,LinkedHashSet等。
  • List接口的实现类主要有:ArrayList,LinkedList,Stack,Vector等。

四,常见的集合底层实现

  • ArrayList底层是数组。
  • LinkedList底层是双向链表。
  • HashMap底层与HashTable原理相同,java 8版本以后如果同一位置哈希冲突大于8则链表变成红黑树。
  • HashTable底层是链地址法组成的哈希表(即数组+单项链表组成)。
  • HashSet底层是HashMap。
  • LinkedHashMap底层修改字HashMap,包含一个维护插入顺序的双向链表。
  • TreeMap底层是红黑树。
  • LinkedHashSet底层是LinkedHashMap。
  • TreeSet底层是TreeMap。

五,HashMap和HashTable区别

  1. HashMap没有考虑同步,是线程不安全的;HashTable使用了synchronized关键字,是线程安全的。
  2. HashMap允许键值都为null;HashTable键值不允许为null.

六,ConcurrentHashMap和HashTable的却别

ConcurrentHashMap集合了HashMap和HashTable二者的优势。HashMap没有考虑同步,HashTable考虑了同步的问题。但是HashTable在每次同步执行时都要锁住整个结构。ConcurrentHashMap锁的方式是稍微细粒度的。

七,ConcurrentHashMap实现原理

  • JDK1.7 : 【数组(Segment) + 数组(HashEntry) + 链表(HashEntry节点)】
  • ConcurrentHashMap(分段锁)对整个桶数组进行了分割分段(Segment),每一把锁只锁容器其中一部分数据,多线程访问容器里不同数据段的数据,就不会存在锁竞争,提高并发访问率。
  • Segment是一种可重入锁ReentrantLock,在ConcurrentHashMap里扮演锁的角色,HashEntry则用于存储键值对数据。
  • JDK1.8 : Node数组+链表 / 红黑树
  • 利用CAS+Synchronized来保证并发更新的安全,底层依然采用数组+链表+红黑树的存储结构。

八,ArrayList和Vector的区别

  1. Vector是线程安全的,ArrayList是线程不安全的。
  2. Vector扩容长度为原来的2倍,ArrayList扩容为原来的1.5倍。

九,ArrayList和LinkedList的区别

  1. LinkedList是基于链表的数据结构,ArrayList是基于动态数组的数据结构。
  2. LinkedList在插入和删除数据是效率更高,ArrayList查询效率更高。

十,HashMap 默认的初始化长度是多少

在JDK中默认长度是16,并且默认长度和扩容后的长度都必须是 2 的幂。

参考链接:https://zhuanlan.zhihu.com/p/267545042

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值