专栏首页cwl_JavaJava基础-集合(二)

Java基础-集合(二)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42528266/article/details/102998538

迭代器Iterator
  • 所有集合类均未提供相应的遍历方法,而是把把遍历交给迭代器完成。迭代器为集 合而生,专门实现集合遍历
  • Iterator是迭代器设计模式的具体实现
  • Iterator方法
    • boolean hasNext(): 判断是否存在另一个可访问的元素
    • Object next(): 返回要访问的下一个元素
    • void remove(): 删除上次访问返回的对象。

问题:可以使用Iterator遍历的本质是什么 实现Iterable接口

For-each循环
  • 增强的for循环,遍历array 或 Collection的时候相当简便
  • 无需获得集合和数组长度,无需使用索引访问元素,无需循环条件
  • 遍历集合时底层调用Iterator完成操作
For-each缺陷
  • 数组
    • 不能方便的访问下标值
    • 不要在for-each中尝试对变量赋值,只是一个临时变量
  • 集合
    • 与使用Iterator相比,不能方便的删除集合中的内容
For-each总结

除了简单遍历并读出其中的内容外,不建议使用增强for

ListIterator和Iterator的关系

public interface ListIterator<E> extends Iterator<E> 都可以遍历List

ListIterator和Iterator的区别
  • 使用范围不同
    • Iterator可以应用于更多的集合,Set、List和这些集合的子类型。
    • 而ListIterator只能用于List及其子类型。
  • 遍历顺序不同
    • Iterator只能顺序向后遍历; ListIterator还可以逆序向前遍历
    • Iterator可以在遍历的过程中remove();ListIterator可以在遍历的过程中remove()、add()、set()
    • ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能
使用泛型
  • 起因
    • JDK1.4以前类型不明确:
    • 装入集合的类型都被当作Object对待,从而失去自己的实际类型。
    • 从集合中取出时往往需要转型,效率低,容易产生错误。
  • 解决办法:泛型,在定义集合的时候同时定义集合中对象的类型
  • 好处:增强程序的可读性和安全性
Collections
  • 专门用来操作集合的工具类
    • 构造方法私有,禁止创建对象
    • 提供一系列静态方法实现对各种集合的操作
    • 具体操作:搜索、复制、排序、线程安全化等
  • 常用方法
    • Collections.addAll(list, "aaa","bbb","ccc","ccc");
    • int index = Collections.binarySearch(list, "ccc");
    • Collections.copy(list2, list);
    • Collections.fill(list3, "888");
    • String max = Collections.max(list4);
    • String min = Collections.min(list4);
    • Collections.reverse(list4);
    • List list5 = Collections.synchronizedList(list4);

旧的集合类

Vector
  • 实现原理和ArrayList相同,功能相同,都是长度可变的数组结构,很多情况下可以互用
  • 两者的主要区别如下
    • Vector是早期JDK接口,ArrayList是替代Vector的新接口
    • Vector线程安全,效率低下;ArrayList重速度轻安全,线程非安全
    • 长度需增长时,Vector默认增长一倍,ArrayList增长50%
Hashtable
  • 实现原理和HashMap相同,功能相同,底层都是哈希表结构,查询速度快,很多情况下可互用
  • 两者的主要区别如下
    • Hashtable是早期JDK提供的接口,HashMap是新版JDK提供的接口
    • Hashtable继承Dictionary类,HashMap实现Map接口
    • Hashtable线程安全,HashMap线程非安全
    • Hashtable不允许null值,HashMap允许null值
新的线程同步集合类
  • 早期集合类Vector、Hashtable:线程安全的,是怎么保证线程安排的,使用synchronized修饰方法
  • 为了提高性能,使用ArrayList、HashMap替换,线程不安全,但是性能好。使用ArrayList、 HashMap,需要线程安全怎么办呢?
    • 使用Collections.synchronizedList(list);Collections.synchronizedMap(m);解决
    • 底层使用synchronized代码块锁
    • 虽然也是锁住了所有的代码,但是锁在方法里边,并所在方法外边性能可以理解为稍有提高吧。 毕竟进方法本身就要分配资源的
  • 在大量并发情况下如何提高集合的效率和安全呢?
    • 提供了新的线程同步集合类,委员java.util.concurrent包下,使用Lock锁
    • ConcurrentHashMap、CopyOnWriteArrayList 、CopyOnWriteArraySet
    • 注意 不是CopyOnWriteHashSet
集合总结

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • C++多线程-windows锁

    在windows系统中,系统本身为我们提供了很多锁。通过这些锁的使用,一方面可以加强我们对锁的认识,另外一方面可以提高代码的性能和健壮性。常用的锁以下四种:临界...

    cwl_java
  • 商城项目-跨域问题

    而我们刚才是从manage.leyou.com去访问api.leyou.com,这属于二级域名不同,跨域了。

    cwl_java
  • JDK1.9-Iterator迭代器

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明...

    cwl_java
  • 详述 IntelliJ IDEA 远程调试 Tomcat 的方法

    博主说:在调试代码的过程中,为了更好的定位及解决问题,有时候需要我们使用远程调试的方法。在本文中,就让我们一起来看看,如何利用 IntelliJ IDEA 进...

    CG国斌
  • 婚姻关系的建模分析

    模型建立 特殊情况分析 帕累托最优 纳什均衡 两种婚姻的对比分析 完全为自己 完全为对方 囚徒困境 婚姻的阶段性分析 模型延伸 婚姻需要努力 先难后易 结论 关...

    用户1147754
  • 像搭积木一样拼装数据中心

    你可能知道腾讯是国内互联网三巨头之一,可能是腾讯两亿多同时在线的QQ用户和4.38亿微信活跃用户中的一员,但是你可能并不了解是什么在支撑着这些亿级用户平台的顺畅...

    腾讯数据中心
  • TencentDataCenter:On the Road

    2014年9月10日,腾讯IDC平台部在北京腾讯汇举办了第一届腾讯数据中心分享日,主题为“开放创新,合作共赢”。此次分享日邀请了工信部电信研究院、BAT互联网公...

    腾讯数据中心
  • 如何实现表格单双行条纹样式

    通过 css3 中伪类 :nth-child 来实现。其中 :nth-child(an+b) 匹配下标 { an + b; n = 0, 1, 2, ...} ...

    山月
  • Topsy如何预测美国大选和奥斯卡结果

    大数据文摘
  • web安全:QQ号快速登录漏洞及被盗原理 web安全:通俗易懂,以实例讲述破解网站的原理及如何进行防护!如何让网站变得更安全。

    为什么你什么都没干,但QQ空间中却发了很多小广告?也许你的QQ账号已经被盗。本文将讲解一个QQ的快速登录的原理。

    小曾看世界

扫码关注云+社区

领取腾讯云代金券