JAVA基础之容器基础内容

Java Collections框架

Java Collections框架中包含了大量的集合接口以及这些接口的实现类和操作它们的方法,具体包含了Set(集合)、List(列表)、Map(键值对)、Queue(队列)、Stack(栈)等,其中List、Set、Queue、Stack都继承了Collection接口。我理解的容器就是类似于放不同奶茶的杯子的统称,不同的实现类对应了盛放不同奶茶需要不同的杯子,而我们不需要知道杯子是怎么构造的,我们只需要知道什么奶茶需要什么杯子即可,而迭代器(Iterator)相当于喝奶茶的吸管,拿到吸管我们不用了解奶茶的构造,仅仅用吸管喝美味的奶茶就好。下面是Collection框架类图:
Collection 框架类图最为主要的是三类:

  • Set:集合,要求集合中的元素不相同,通过定义equals()函数来确保对对象的唯一性。
  • List:有序的Collection,按照对象进入的顺序保存数据,可以通过索引来读取数据。
  • Map:键值对,要求Key具有唯一性。其中HashMap通过散列表实现,LinkedHashMap采用散列表来维持内部的顺序,TreeMap是基于红黑树的数据结构来实现。

Iterator(迭代器)

用于遍历以及选择序列中的对象。就像上面所说的我们就像使用吸管一样不必了解容器内部构造,就可以使用容器实现的迭代器遍历容器的元素。包含最为主要的三个方法:

  • 利用容器对象的Iterator()方法返回一个Iterator,使用next()返回第一个元素。
  • hasNext() 判断是否还有元素。
  • remove()删除迭代器返回的元素。

另外,在使用Iterator()遍历容器时常常出现ConcurrentModificationException异常,主要是在使用迭代器遍历容器时,进行了容器的增加或者删除操作,因为当调用容器的Iterator() 方法时,会把容器包含的对象个数赋值给Iterator对象中的expectedModCount,在调用next() 方法时会比较当前容器元素个数和expectedModCount,如果不相等抛出ConcurrentModificationException异常。解决的方法有:

  • 在使用Iterator遍历时,如果删除或者增加的一个元素后即刻使用break跳出循环。
  • 使用线程安全的容器:ConcurrentHashMap和CopyOnWriteArrayList。
  • 在遍历时使用一个容器将要删除的对象保存,然后遍历结束后使用removeAll()。
  • 使用Iterator自带的remove()方法删除
  • 把遍历容器时对容器的操作放到synchronized代码中。

同类容器之间的区别

ArrayList、Vector、LinkedList区别

三者都是可伸缩的数组,可以根据用户的需求动态的变换数组的长度,很好的解决了固定长度数组构造时需要指定固定的长度的问题。另外,它们有以下区别:

  • ArrayList和Vector都是利用Object[] array实现的,都是顺序存储的,支持用下标访问元素。当当前容器容量不足时,动态扩充容量,Vector采用2倍扩容,而ArrayList采用1.5倍扩容(ArrayList源码详解),其中前者可以指定扩容因子,后者固定。另一个最大的区别,Vector是线程安全的,后者是线程不安全的。
  • LinkedList是利用双向列表实现的,对数据的索引需要从头开始遍历,效率较低,但是插入数据较快。

HashMap、HashTable、TreeMap以及WeakHashMap区别

  • 对比HashMap和HashTable,前者是后者的轻量级实现即是非线程安全实现,HashMap允许空键值存在,而HashTable不允许;HashMap去掉HashTable中contains方法,改为containsKey以及containsValue,另外前者是Map的一个实现,而后者是Dictionary的一个实现;Hashtable使用Enumeration,HashMap使用Iterator;对于扩容方式,HashTable默认大小为11,扩容因子为old*2+1,HashMap默认大小是16,扩容因子是2的指数。
  • TreeMap实现了SortedMap接口,能够按照指定的顺序对键值排序,因此取出的的键值是排完序的。
  • WeakHashMap的key采用一种弱引用的方式,只要key不被外部引用,它就可以被gc回收,而HashMap则是key被删除。

Collections工具类

  • 针对Collection的一个包装类,提供一系列的静态方法来处理相应的容器,服务于Collection框架中的各种类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/544348.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

更快的Maven构建工具mvnd和Gradle哪个性能更好?

作者 | 磊哥来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)Maven 作为经典的项目构建工具相信很多人已经用很久了,但如果体验过 Gradle,那感觉只有两个字“真香…

SpringBoot + ShardingSphere 秒级分库分表!

Spring Boot 作为主流微服务框架,拥有成熟的社区生态。市场应用广泛,为了方便大家,整理了一个基于spring boot的常用中间件快速集成入门系列手册,涉及RPC、缓存、消息队列、分库分表、注册中心、分布式配置等常用开源组件&#xf…

git reset, git checkout, git revert 区别 (译)

博客原文地址: http://blog.mexiqq.com/index.php/archives/3/题记:团队中大多数成员使用 sourceTree 和 github 两款 git 工具,然而大家对于图形化工具提供的 reset,checkout,revert 功能点并不是很了解,甚至于混淆,然后凭借猜测去使用。功夫…

Redis笔记之基本数据结构 动态字符串SDS

简单动态字符串 传统上的C语言的字符串表示是以空字符结尾的字符数组(C字符串),redis自己实现一个动态字符串(SDS),两者之间的区别以及使用SDS的好处有: 结构不同。C字符串以空字符结尾的字符…

扯一把 Spring 的三种注入方式,到底哪种注入方式最佳?

1. 实例的注入方式首先来看看 Spring 中的实例该如何注入,总结起来,无非三种:属性注入set 方法注入构造方法注入我们分别来看下。1.1 属性注入属性注入是大家最为常见也是使用最多的一种注入方式了,代码如下:Service p…

Redis笔记之基本数据结构 链表

链表 链表具有空间存储不连续,增删节点快的优点,因此redis在列表键、发布与订阅、慢查询、监视器等使用了链表作为底层实现。由于C语言中没有内置的链表实现,因此redis自己进行了实现。 双向链表。每个listtNode都有perv和next指针&#x…

SpringCloud组件:Ribbon负载均衡策略及执行原理!

大家好,我是磊哥。今天我们来看下微服务中非常重要的一个组件:Ribbon。它作为负载均衡器在分布式网络中扮演着非常重要的角色。本篇主要内容如下:在介绍 Ribbon 之前,不得不说下负载均衡这个比较偏僻的名词。为什么说它偏僻了&…

Redis笔记之基本数据结构 字典

字典 符号表、关联数组或者映射,有点类似于java中的map,用于保存键值对key-value。字典中的键key是独一无二的。底层实现为哈希表。下面进行简述: 哈希表。哈希表主要包含table数组、size、sizemask以及used。table用于保存哈希表节点&…

【零基础学习iOS开发】【02-C语言】02-第一个C语言程序

本文目录 前言一、编写第一个C语言程序-Hello World二、编译程序三、链接程序四、运行程序五、总结六、学习建议七、clang指令汇总回到顶部前言 前面已经唠叨了这么多理论知识,从这讲开始,就要通过接触代码来学习C语言的语法。学习任何一门语言&#xff…

安卓平板体验Java开发,还能白嫖一年阿里无影云,真香!(内含白嫖方法,人人可领)...

作者 | 磊哥来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone)阿里无影云早有耳闻,前两天看朋友发体验照片,可能是程序员天生爱折腾的特性又发挥作用了&#xff0c…

你知道group by的工作原理和优化思路吗?

前言 日常开发中,我们经常会使用到group by。亲爱的小伙伴,你是否知道group by的工作原理呢?group by和having有什么区别呢?group by的优化思路是怎样的呢?使用group by有哪些需要注意的问题呢?本文将跟大家…

关Jquery判断input type=checkbox元素是否被选中的判断

2019独角兽企业重金招聘Python工程师标准>>> 在用到复选框的时候&#xff0c;想在js中判断chekbox是否被选中 <input name"isPermit" id"isPermit" type"checkbox"> 百度了很多的判断方法 1、 if($("#isPermit").att…

Redis夺命十二问,你能扛到第几问?

Redis是面试中绕不过的槛&#xff0c;只要在简历中写了用过Redis&#xff0c;肯定逃不过。今天我们就来模拟一下面试官在Redis这个话题上是如何一步一步深入&#xff0c;全面考察候选人对于Redis的掌握情况。小张&#xff1a;面试官&#xff0c;你好。我是来参加面试的。面试官…

bzoj 1192

http://www.lydsy.com/JudgeOnline/problem.php?id1192 好像学过一个东西&#xff1a; [0..2^(N1)-1]内的数都的都可以由2^0,2^1,...,2^N这N1个数中若干个相加得到。 #include<cstdio> #include<cstdlib> #include<iostream> #include<fstream> #incl…

Spring Boot Admin 报警提醒和登录验证功能实现!

作者 | 磊哥来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;Spring Boot Admin&#xff08;SBA&#xff09;是一个开源的社区项目&#xff0c;用于管理和监控 Spring Boot 应用程序&…

企业Shell面试题18:单词及字母去重排序案例

1、按单词出现频率降序排序&#xff01; 2、按字母出现频率降序排序&#xff01; the squid project provides a number of resources to assist users design,implement and support squid installations. Please browse the documentation and support sections for more inf…

5种高大上的yml读取方式,你知道几种?

我们今天就来点实战&#xff0c;总结一下除了烂大街的Value和ConfigurationProperties外&#xff0c;还有哪些读取yml配置文件的方法&#xff1f;1、Environment在Spring中有一个类Environment&#xff0c;它可以被认为是当前应用程序正在运行的环境&#xff0c;它继承了Proper…

为什么ConcurrentHashMap不允许插入null值?

作者&#xff1a;磊哥来源 | Java面试真题解析&#xff08;ID&#xff1a;aimianshi666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;在 Java 语言中&#xff0c;ConcurrentHashMap 和 Hashtable 这些线程安全的集合是不允许 key 或 value 插…

.NET APlayer播放器 demo

工作需要,想开发一款播放器,当无意间浏览到APlayer的时候大爱啊,有木有迅速投入精力,在APlayer论坛看大牛们的作品及经验,看SDK中提供的chm电子书最后看了博客园中周见智的文章(灰常好!最终作品也用的他的demo改进)先来晒一下最终的效果图片。 效果截图&#xff1a;1.初始界面。…

Spring Cloud Alibaba Nacos 服务注册与发现功能实现!

作者 | 磊哥来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;Nacos 是 Spring Cloud Alibaba 中一个重要的组成部分&#xff0c;它提供了两个重要的功能&#xff1a;服务注册与发现和统一…