当前位置: 首页 > news >正文

Java集合-----java集合框架常见问题

1什么是Java集合API

Java集合框架API是用来表示和操作集合的统一框架,它包含接口、实现类、以及帮助程序员完成一些编程的算法


简言之,API在上层完成以下几件事:
● 编程更加省力,提高城程序速度和代码质量
● 非关联的API提高互操作性
● 节省学习使用新API成本
● 节省设计新API的时间
● 鼓励、促进软件重用


具体来说,有6个集合接口,最基本的是Collection接口,由三个接口Set、List、SortedSet继承,
另外两个接口是Map、SortedMap,这两个接口不继承Collection,表示映射而不是真正的集合。

2什么是Iterator

一些集合类提供了内容遍历的功能,通过java.util.Iterator接口。这些接口允许遍历对象的集合。依次操作每个元素对象。当使用Iterators时,在获得Iterator的时候包含一个集合快照。通常在遍历一个Iterator的时候不建议修改集合本省。

3 Iterator与ListIterator有什么区别?

Iterator:只能正向遍历集合,适用于获取移除元素。
ListIerator:继承Iterator,可以双向列表的遍历,同样支持元素的修改。

4什么是HaspMap和Map?

Map是接口,Java 集合框架中一部分,用于存储键值对,
HashMap是用哈希算法实现Map的类。

5对比Hashtable VS HashMap(HashMap与HashTable有什么区别)?

两者都是用key-value方式获取数据

Hashtable是原始集合类之一(也称作遗留类)。
HashMap作为新集合框架的一部分在Java2的1.2版本中加入。

它们之间有一下区别:

● HashMap和Hashtable大致是等同的,除了非同步和空值(HashMap允许null值作为key和value,而Hashtable不可以)。
● HashMap没法保证映射的顺序一直不变,但是作为HashMap的子类LinkedHashMap,如果想要预知的顺序迭代(默认按照插入顺序),你可以很轻易的置换为HashMap,如果使用Hashtable就没那么容易了。
● HashMap不是同步的,而Hashtable是同步的。
● 迭代HashMap采用快速失败机制,而Hashtable不是,所以这是设计的考虑点。

6在Hashtable上下文中同步是什么意思?

同步意味着在一个时间点只能有一个线程可以修改哈希表,任何线程在执行hashtable的更新操作前需要获取对象锁,其他线程等待锁的释放。

7什么叫做快速失败特性

从高级别层次来说快速失败是一个系统或软件对于其故障做出的响应。一个快速失败系统设计用来即时报告可能会导致失败的任何故障情况,它通常用来停止正常的操作而不是尝试继续做可能有缺陷的工作。当有问题发生时,快速失败系统即时可见地发错错误告警。在Java中,快速失败与iterators有关。如果一个iterator在集合对象上创建了,其它线程欲“结构化”的修改该集合对象,并发修改异常 (ConcurrentModificationException) 抛出。

8怎样使Hashmap同步?

HashMap可以通过Map m = Collections.synchronizedMap(hashMap)来达到同步的效果。

9什么时候使用Hashtable和HashMap

基本的不同点是Hashtable同步HashMap不是的,所以无论什么时候有多个线程访问相同实例的可能时,就应该使用Hashtable,反之使用HashMap。非线程安全的数据结构能带来更好的性能。

如果在将来有一种可能—你需要按顺序获得键值对的方案时,HashMap是一个很好的选择,因为有HashMap的一个子类LinkedHashMap。所以如果你想可预测的按顺序迭代(默认按插入的顺序),你可以很方便用LinkedHashMap替换HashMap。反观要是使用的Hashtable就没那么简单了。同时如果有多个线程访问HashMap,Collections.synchronizedMap()可以代替,总的来说HashMap更灵活。

10关于Vector类,为什么Vector类认为是废弃的或者是非官方地不推荐使用?或者说为什么我们应该一直使用ArrayList而不是Vector?

你应该使用ArrayList而不是Vector是因为默认情况下你是非同步访问的,Vector同步了每个方法,你几乎从不要那样做,通常有想要同步的是整个操作序列。同步单个的操作也不安全(如果你迭代一个Vector,你还是要加锁,以避免其它线程在同一时刻改变集合).而且效率更慢。当然同样有锁的开销即使你不需要,这是个很糟糕的方法在默认情况下同步访问。你可以一直使用Collections.sychronizedList来装饰一个集合。

事实上Vector结合了“可变数组”的集合和同步每个操作的实现。这是另外一个设计上的缺陷。Vector还有些遗留的方法在枚举和元素获取的方法,这些方法不同于List接口,如果这些方法在代码中程序员更趋向于想用它。尽管枚举速度更快,但是他们不能检查如果集合在迭代的时候修改了,这样将导致问题。尽管以上诸多原因,oracle也从没宣称过要废弃Vector.


【正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!下面有个“顶”字,你就顺手把它点了吧(要先登录CSDN账号哦 )】


—–乐于分享,共同进步!
—–更多文章请看:http://blog.csdn.net/duruiqi_fx


转载于:https://www.cnblogs.com/hainange/p/6153876.html

相关文章:

  • 本地通知和推送通知编程指南
  • web.xml文件的作用
  • 计算机网络笔记--绪论(一)
  • 三星GT-S7562i 刷机 完整版
  • .NET中使用Redis (二)
  • 3.整数表达式
  • Linux系统上安装mysql数据库
  • cenos6.4 samba配置
  • 关于Cocos2d-x中GameController的定义
  • AsyncTask源码分析
  • 如何修改ubuntu的用户名和主机名称
  • NFS服务器配置
  • PHP输出字节流带上BOM
  • InnoDB体系架构
  • 【2016-7-20】 Linux基础知识初识
  • 《Java编程思想》读书笔记-对象导论
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • C# 免费离线人脸识别 2.0 Demo
  • Github访问慢解决办法
  • HTTP请求重发
  • JAVA多线程机制解析-volatilesynchronized
  • js ES6 求数组的交集,并集,还有差集
  • Objective-C 中关联引用的概念
  • Spring Cloud中负载均衡器概览
  • 浏览器缓存机制分析
  • 浅谈Golang中select的用法
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 设计模式走一遍---观察者模式
  • 小程序开发中的那些坑
  • 原生Ajax
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​VRRP 虚拟路由冗余协议(华为)
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (4.10~4.16)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二)Linux——Linux常用指令
  • (二)linux使用docker容器运行mysql
  • (转)linux 命令大全
  • (转)一些感悟
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .bat批处理(一):@echo off
  • .gitignore文件—git忽略文件
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .net6Api后台+uniapp导出Excel
  • .NET开发者必备的11款免费工具
  • @拔赤:Web前端开发十日谈
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [Angular 基础] - 表单:响应式表单
  • [c]统计数字
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [corCTF 2022] CoRJail: From Null Byte Overflow To Docker Escape