java 容器都有哪些?

java 容器都有哪些?容器可以说是 JavaCore 中比较重要的一部分了 数组 String java util 下的集合容器 数组长度限制为 Integer Integer MAX VALUE String 的长度限制 底层是 char 数组长度

容器可以说是Java Core中比较重要的一部分了。

数组,String,java.util下的集合容器

==============================================================================

数组长度限制为 Integer.Integer.MAX_VALUE;

String的长度限制: 底层是char 数组 长度 Integer.MAX_VALUE 线程安全的

java.util下的集合容器

java 容器都有哪些?

这一块之所以重要是因为,各个接口的特性不同。下面说一下我对这些类的理解。

Set下各种实现类对比

HashSet基于哈希表实现,有以下特点:

          1.不允许重复

           2.允许值为null,但是只能有一个

           3.无序的。

           4.没有索引,所以不包含索引操作的方法

LinkedHashSet跟HashSet一样都是基于哈希表实现。只不过linkedHashSet在hashSet的基础上多了一个链表,这个链表就是用来维护容器中每个元素的顺序的。有以下特点:

           1.不允许重复

           2.允许值为null,但是只能有一个

           3.有序的。

           4.没有索引,所以不包含索引操作的方法

TreeSet是SortedSet接口的唯一实现类,是基于二叉树实现的。TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。有以下特点:

           1.不允许重复

           2.不允许null值

           3.没有索引,所以不包含索引操作的方法

List下各种实现类对比。(这几个类都是有序的,允许重复的)

ArrayList是基于数组实现的,其特点是查询快,增删慢。

        查询快是因为数组的空间是连续的,查询时只要通过首地址和下标很快就能找到元素。

        增删慢是因为数组是不能扩容的,一旦增加或者删除元素,内部操作就是新开辟一个数组把元素copy到新的数组,老的数   组等待被垃圾回收。

以元素增加为例,我们看一下内部实现的源码:

java 容器都有哪些?

LinkedList是基于链表实现的。相比于ArrayList其特点是查询慢,增删快。

查询慢:因为链表在内存中开辟的空间不一定是连续的(基本上不可能是连续的)所以链表实现的方式是每个元素节点都会存放自己的地址,数据以及下一个节点的地址,这样把所有的元素连接起来。所以当要查询元素时只能一个一个的往下找,相比于数组的首地址加下标会慢上不少。

下面是链表的数据存储方式:假设有三个元素

java 容器都有哪些?

Vector也是基于数组实现的,相比于arrayList它是线程安全的。如果不考虑线程安全它,ArrayList性能更优。

Map是双列集合的超类。也就是键值对形式。

HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的分别。主要的区别有:线程安全性,同步(synchronization),以及速度。

  • HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。
  • HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
  • 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
  • 由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
  • HashMap不能保证随着时间的推移Map中的元素次序是不变的。

LinkedHashMap和hashMap的区别在于多维护了一个链表,用来存储每一个元素的顺序,就跟HashSet和LinkedHashSet差不多。

HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。

欢迎加微信一起学习交流

java 容器都有哪些?

相关面试题可以查看      面试题系列

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/214202.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午4:45
下一篇 2026年3月18日 下午4:46


相关推荐

  • 安装tensorflow GPU版本–tensorflow-gpu版本与CUDA版本对应关系(持续更新,目前到TF2.7)「建议收藏」

    安装tensorflow GPU版本–tensorflow-gpu版本与CUDA版本对应关系(持续更新,目前到TF2.7)「建议收藏」一、WIndows安装GPU版本tensorflow注意一下几个问题一般就不会出错(1)确定自己要安装哪个版本的tensorflow-gpu;(1)根据自己要装的tensorflow-gpu版本确定要下载的CUDA版本;(2)根据要安装的CUDA版本确定要下载的Cudnn版本。二、tensorflow-gpu版本与CUDA版本对应关系不同版本的tensorflow-gpu与CUDA对应关…

    2022年5月16日
    561
  • vue 数组添加数据「建议收藏」

    vue 数组添加数据「建议收藏」vue数据添加分为三种方法:1.unshift(),2.push(),3.splice()<template> <div> <ul> <liv-for=”(time,index)oflistTable”:key=”index”@click=”copyNew(time,index)”> {{time.id}}{{time.name1}}{{time.name2}}添加 </li> </u

    2022年6月12日
    413
  • 最新版微信小程序如何引入iconfont阿里矢量图库解决方案

    最新版微信小程序如何引入iconfont阿里矢量图库解决方案前言:问题引发的原因来自最近在写微信小程序教学项目,项目中的一个图片是我随手切的,因为之前在Vue项目中一直在使用阿里矢量图库,我就想把阿里矢量图库ico图标集成到自己项目中,百度看了一些博客跟着做都引入不成功,研究了二十分钟弄出来,特此记录一下,同时作为参考文档供教学使用。1、首先我们打开阿里矢量官网接着我们需要登录一下,如果没有账号这里可以使用微博注册登录一下,登录成功后,点击【资源管理–>>我的项目】接着我们点击【新建项目】填写【项目名称:这里随便…

    2025年6月10日
    5
  • java字符串去重_Java8新特性之字符串去重介绍

    java字符串去重_Java8新特性之字符串去重介绍导读热词 8 月 19 日 Oracle 发布了 JDK8u20 JDK8u20 包含很多新特性 比如 Java 编译器更新 支持在运行时通过 API 来修改 MinHeapFreeR 和 MaxHeapFreeR 参数 新的 GC 调优指南文档 不过在众多新特性中 最令人期待的还属字符串去重 StringDedupl 如何减少内存占用一直是一个永恒的话题 而在 Java 应用中 经常会看到 St

    2026年3月17日
    3
  • pytest 执行用例_python分布式爬虫

    pytest 执行用例_python分布式爬虫前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

    2022年7月31日
    7
  • JavaScript最受程序员欢迎,但薪资却是最少?

    JavaScript最受程序员欢迎,但薪资却是最少?

    2022年3月13日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号