ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JAVA常用集合解析

2022-09-01 18:01:13  阅读:177  来源: 互联网

标签:... 常用 JAVA HashMap HashSet 详解 集合 解析


JAVA常用集合解析


  • 常用集合属性详解
  • 集合底层实现原理
  • 常用集合适用场景分析

集合属性详解

集合是一个存放对象的引用的容器,在Java中它存在于java.util包下,List、Set、Vector、Map等都继承与Collection接口。

1. Map

HashMap

常用方法
containsValue()
containsKey()

详解
HashMap初始大小为16,扩容因子默认大小为1.75,支持以线程异步,但是安全系数不高,使用hashCode()属性进行快速查询,哈希算法支持的集合,HashMap最多只允许一条记录的键为null,允许多条记录的值为null

HashTable

常用方法
clear()
elements()
contains()

详解
HashTable是线程同步的且线程安全,底层采用数组+连表的结构,但是key值不能存储null,初始大小为11,扩容为原来的两倍,最大扩容量是2^32-8,在处理冲突时HashTable采用的是链表,HashCode取值会取默认的hashCode

TreeMap

*常用方法
clone()
comparator()
ceilingEntry()

详解
TreeMap的底层由红黑树组成,在新增和删除操作中效率较低,但是TreeMap支持一系列的导航方法,可以对键对象进行排序,且支持序列化,是唯一一个map带有subMap()方法的集合,

2. List or Set

    • ArrayList
    • LinkedList
    • Vector
    • HashSet
    • TreeSet

ArrayList

*常用方法
add()
size()
get()
...

详解
ArrayList是一个由数组实现的List,初始容量为10,因为底层是数组所以查询速度很快,而且支持自动扩容,但是插入和删除的效率较低,相较于LinkedList,ArrayList的开销较小,在插入时,从尾部插入数据的效率要高于中间和头部

LinkedList

*常用方法
add()
addFirst()
removeFirst()
...

详解
LinkedList是基于双向链表实现的集合,在查询方面因为存储不连续,只能通过遍历查询所以效率较为低,但是执行插入和删除速度较快,可以当做堆栈,队列或者双向队列来使用,不存在初始大小和扩容比例,每次新增元素时new Node(),LinkedList允许存储null值

Vector

*常用方法
add()
addFirst()
removeFirst()
...

详解
Vector类似于数组支持下标访问方式等;支持随机访问,使用【】或 at(),因为增加了同步检查所以执行插入和删除效率较低,而且数据一旦超过默认分配的大小就需要对当前资源进行整体的重新分配、拷贝和释放,vector的增长是在空间满了之后直接扩容一倍

HashSet

*常用方法
hashCode()
qeual()
put()
...

详解
HashSet是一个为快速查找设计的Set,它是基于HashMap实现的集合,因此HashSet不会保证元素的顺序,HashSet通过hashCode和equals来保证元素的唯一性,但是元素的值可以为null

TreeSet

*常用方法
add()
remove()
isEmpty()
...

详解
TreeSet是基于二叉树实现的,它可以保证元素的唯一性与实现元素的排序,通过自然排序器和Comparator实现排序,默认是按升序自然顺序排序,TreeSet需要实现Comparable接口


如有错误欢迎补充
作者:科目三考五次
2022 年 09月 01日

标签:...,常用,JAVA,HashMap,HashSet,详解,集合,解析
来源: https://www.cnblogs.com/reflect-up/p/16647394.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有