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