欢迎关注微信公众号:Coder编程
获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识!**java
本章主要介绍Collection集合相关知识,结合面试中会提到的相关问题进行知识点的梳理。但愿能帮到你们~
基于JDK1.8,若有错误,还望你们可以指出!
涉及的Collection集合相关面试题面试
**来自百度百科的回答:**
Collection两大致系:链表List、集合Set编程
List特色:元素有序;元素能够重复;元素都有索引(角标)
List里存放的对象是有序的,同时也是能够重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。
由于往list集合里插入或删除数据时,会伴随着后面数据的移动,全部插入删除数据速度慢。设计模式
Set特色:元素无序;元素不能够重复;
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。数组
同时集合中还有另一种类型:Map(映射)。安全
Map特色:键值对;键不能够重复;值能够重复;
Map集合中存储的是键值对,键不能重复,值能够重复。根据键获得值,对map集合遍历时先获得键的set集合,对set集合进行遍历,获得相应的值。微信
Collection数据结构
List (有序集合,容许相同元素和null) --LinkedList (非同步,容许相同元素和null,遍历效率低插入和删除效率高) --ArrayList (非同步,容许相同元素和null,实现了动态大小的数组,遍历效率高,用的多) --Vector(同步,容许相同元素和null,效率低) ---Stack(继承自Vector,实现一个后进先出的堆栈) Set (无序集合,不容许相同元素,最多有一个null元素) --HashSet(无序集合,不容许相同元素,最多有一个null元素) Map (没有实现collection接口,key不能重复,value能够重复,一个key映射一个value) --Hashtable (实现Map接口,同步,不容许null做为key和value,用自定义的类看成key的话要复写hashCode和eques方法,) --HashMap (实现Map接口,非同步,容许null做为key和value,用的多) --WeakHashMap(实现Map接口)
(1)添加
boolean add(E o);
boolean add(Collection<? extends E> c);函数
(2)删除
boolean remove(Object o);
boolean removeAll(Collection<? extends E> c)学习
void clear();
(3)判断
a.判断集合中是否有元素:boolean isEmpty();
b.判断集合中是否包含某个元素:boolean contains(Object o);
c.判断集合中是否包含某些元素:boolean contains(Collection<?> c);
(4)获取
a.获取集合中元素个数:int size();
b.遍历集合中全部元素:Iterator<E> iterator();
c.判断两个集合中是否存在相同的元素并保留两个集合中相同的元素删除不一样的元素:boolean retainAll(Collection<?> c);
(5)其余
将集合中元素转为数组:
a. Ojbect[] toArray();
b. <T> T[] toArray(); 泛型
Java8新增方法
在 JDK 8 之后,Collection 接口还提供了从集合获取连续的或者并行流:
Stream<E> stream()
Stream<E> parallelStream()
于Collection接口相关还有一个抽象类AbstractCollection:
AbstractCollection是一个抽象类,实现了Collection接口的部分功能,实现了一些最基本的通用操做,把复杂的和业务相关的延迟到子类实现。
在AbstractCollection中,主要实现了contains(), isEmpty(), toArray(), remove(), clear() 这几个操做。有兴趣的同窗能够自行研究下,逻辑都比较简单。
特别注意:List接口扩展了一个一些方法,其中最重要,也是用的最多的是:
E get(int index) 返回指定索引的元素
数组特色:
集合特色:
能够看出数组和集合在数据的存储,访问,类型,长度等都有不一样的地方。
Iterator iterator():取出元素的方式:迭代器。该对象必须依赖于具体容器,由于每个容器的数据结构都不一样。
因此该迭代器对象是在容器中进行内部实现的。对于使用容器者而言,具体的实现不重要,只要经过容器获取到该实现的迭代器的对象便可,也就是iterator方法。
扩展知识:
ArrayList里面的iterator方法采用了设计模式中的——工厂方法模式!
有兴趣的同窗能够后续看到我另外的文章“设计模式精讲”专栏。
该问题与第二个问题相似~ 后续文章会有更详细的介绍!
Collection两大致系:链表List、集合Set 另映射Map
List接口及子类介绍
List是有序的Collection,使用此接口可以精确的控制每一个元素插入的位置。用户可以使用索引(元素在List中的位置,相似于数组下标)来访问List中的元素,这相似于Java的数组。 和下面要提到的Set不一样,List容许有相同的元素。 除了具备Collection接口必备的iterator()方法外,List还提供一个listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些add()之类的方法,容许添加,删除,设定元素,还能向前或向后遍历。
实现List接口的经常使用类有:
在后续的文章中咱们将一一详细介绍这些类的相关特性!
Set接口及子类介绍
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。
注意:必须当心操做可变对象(Mutable Object)。若是一个Set中的可变元素改变了自身状态致使Object.equals(Object)=true将致使一些问题。
实现Set接口的经常使用类有:
在后续的文章中咱们将一一详细介绍这些类的相关特性!
Map接口及子类介绍
注意:Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每一个key只能映射一个value。
Map接口提供3种集合的视图,Map的内容能够被看成一组key集合,一组value集合,或者一组key-value映射。
在后续的文章中咱们将一一详细介绍这些类的相关特性!
本章节介绍了Collection接口中的大部分可能在面试过程当中会出现的内容,
并无详细去介绍其子类及其实现相关的原理。这方面的内容会放在后续的章节中去详细介绍。
欢迎关注微信公众号: Coder编程
获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识!
![]()