String,java.util下的集合容器

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

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

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

java.util下的集合容器

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

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到新的数组,老的数   组等待被垃圾回收。

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

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

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

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

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如何实现容器_Java的容器都有哪些,怎么实现的相关推荐

  1. java课程有哪些_java专业课程都有哪些呢?

    随着现在报考java专业的学生人数,每年都有增长的趋势,而且有不少院校都已经扩招了.相信大家都想了解一下java专业专业课程都有哪些吧?今天小编为大家整理了相关的课程介绍. 1.Java 程序设计基础 ...

  2. java 容器_JAVA的容器

    JAVA的容器---List,Map,Set Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtab ...

  3. java web容器_Java Web容器安全

    这里的Java Web容器特指Tomcat,Tomcat依然是最流行的Java Web容器,你大爷还是你大爷. 本文并不涉及业务层面上的安全控制,只针对Tomcat自身所支持的相关安全控制功能与特性. ...

  4. java spring 容器_java – Spring容器实现

    我继续学习Spring,很难弄清楚ApplicationContext的实现方式.我是独立的J2EE应用程序,我对Web *或Portlet *实现不感兴趣. 您能否向我提供可能性的简要列表(如果不清 ...

  5. java十六进制转二进制_Java进制都有哪些?

    定义 进制也就是进位计数制,是人为定义的带进位的计数方法. 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位. 常用进制类型 二进制 · 计算机底层都是使用二进 ...

  6. java项目初期化_Java初始化规则都不懂,搞什么开发!

    这个教程,咱们来对Java中设计到的初始化规则,或者说初始化顺序,来做一下汇总,这里我基本上把Java中,默认初始化,静态成员初始化,非静态成员初始化,静态代码块,非静态代码块,以及继承中所涉及到的初 ...

  7. java技术学习内容_Java开发主要都学些什么内容?

    展开全部 Java开发培训班主要学32313133353236313431303231363533e58685e5aeb931333363386164习的课程大纲,你可以看下. 第一阶段:JavaSE ...

  8. java中组件与容器_java中的容器组件和非容器组件

    1.java使用到的图形类主要在java.awt 与javax.swing包中. 2.java.awt 与 javax.swing包的区别: ① java.awt中使用的图形类都是依赖于系统的图形库的 ...

  9. java 容器_Java容器框架学习整理

    一:容器框架概述 1.什么是容器 2.Java 中的容器 二:Collectoin 容器 1.Collection 接口定义 2.Collection 三个重要的子接口 List.Set.Queue ...

  10. java并发编程并发容器_Java并发编程:同步容器

    为了方便编写出线程安全的程序,Java里面提供了一些线程安全类和并发工具,比如:同步容器.并发容器.阻塞队列.Synchronizer(比如CountDownLatch).今天我们就来讨论下同步容器. ...

最新文章

  1. java oom_Java中关于OOM的场景及解决方法
  2. Promise的用简要使用方式
  3. 「禾连健康」轻松实现弹性降本20%以上,竟然是因为使用了它!
  4. java编写螺旋矩阵讲解_Java如何实现螺旋矩阵 Java实现螺旋矩阵代码实例
  5. 两个datatable的比较
  6. mysql ext_RHEL5+postfix+mysql+extmai(源代码)(一)
  7. 召回离线评估指标(一)
  8. 中国实验室玻璃器皿行业市场供需与战略研究报告
  9. 兼容性视图html页面,浏览器兼容性视图设置在哪
  10. 对大数据、云计算的联系和区别理解学习
  11. static关键字分析(含解析图)
  12. GPRS DTU工作原理 GPRS DTU通信终端
  13. CSS3之position:sticky使用
  14. 第一节:Ajax 入门及环境
  15. 基于Matlab的三角函数方程组解算方法
  16. 自学编程的好方法,直接省了几万块钱报班,不收藏就可惜了
  17. DevExpress控件学习总结 z
  18. Java中比较常见的主流框架及相关技术合集
  19. 低代码、端到端,一小时构建IoT示例场景,声网发布灵隼物联网云平台
  20. 2021年这些高频面试知识点最后再发一次,跳槽薪资翻倍

热门文章

  1. wait()、notify()、notifyAll()原理用法详解sleep()与wait()区别
  2. Nacos集群(一)节点启动初始化源码解析
  3. Testing Flutter apps翻译-使用 Mockito 模拟依赖项
  4. 解决JavaScript浮点数(小数) 运算出现Bug的方法
  5. 2 BeeGo 参数配置与路由配置
  6. 《Cocos2D-x权威指南》——第3章 Cocos2D-x中的核心类
  7. 多家公司布局大数据基金 策略模型待检验
  8. codeforces 446A DZY Loves Sequences
  9. struts+spring action应配置为scope=prototype
  10. delphi7在windows server 2003企业版上不能打开项目的选项(Options)窗口的解决方法...