Java修炼之路——基础篇——Java集合类详解2

Set和List区别?Set如何保证元素不重复?
Set、List都实现了Collection接口,List是有序的列表,Set是无序的集合(TreeSet有序)

List实现类:

  • ArrayList :基于数组,可动态扩容
  • LinkedList:基于双向链表,可做堆栈使用
  • Vector:基于数组,基本相当于线程安全的ArrayList(基于synchronized),已被CopyOnWriteArrayList取代(基于ReentrantLock)
  • Stack:基于Vector实现,线程安全,先进后出(FILO,栈)

Set集合不会记住元素的顺序位置,不允许集合中有重复元素;
Set实现类:

  • HashSet:基于HashMap实现,允许null,
  • LinkedHashSet:基于LinkedHashMap实现,底层结构为哈希表结构+链表结构+红黑树
  • TreeSet:有序,基于TreeMap,红黑树

其他参见:https://blog.csdn.net/zhaohong_bo/article/details/87969753
具体见源码

Java 8 中 stream 相关用法
Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。
参见博客:https://www.ibm.com/developerworks/cn/java/j-lo-java8streamapi/

apache 集合处理工具类的使用
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。
详见:https://www.cnblogs.com/crazylqy/p/4872236.html

不同版本的 JDK 中 HashMap 的实现的区别以及原因
jdk 1.8 HashMap做了优化,引入了红黑树
详见:https://blog.csdn.net/vking_wang/article/details/14166593

Collection 和 Collections 区别
java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。
Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

Arrays.asList 获得的 List 使用时需要注意什么
参见博文:https://blog.csdn.net/kusedexingfu/article/details/77824189

Enumeration 和 Iterator 区别
JavaDoc:在Java集合框架中,Iterator是用来替代Enumeration 的。
Iterator支持删除元素,并且方法命名完善了下

Enumeration 
boolean hasMoreElements();
E nextElement();
Iterator
boolean hasNext();
E next();
void remove();

2) Iterator支持fail-fast机制,而Enumeration不支持

fail-fast 和 fail-safe
fail-fast:
当使用迭代器迭代一个集合的时候,如果有另外的线程在修改这个集合,那么很可能会抛出ConcurrentModification异常,java.util下的都是快速失败
fail-safe:
当使用迭代器迭代一个集合的时候,先对集合进行一次拷贝,所以其他线程更改集合元素不会影响本次迭代
详见:https://blog.csdn.net/u010889616/article/details/79954413

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值