JAVA集合概论

集合图标关系
除Map外,所有集合均实现了Iterable接口,那么首先我们可以了解下Iterable的特点

  • 第一,实现了Iterable接口的类可以增强for循环,增强for循环也就是指forEach循环;
  • 第二点,实现该接口的类必须提供迭代器Iterator的方法,该方法的返回值为Iterator.所以该它也可以算是集合的一种. 迭代器还为我们提供了hasNext();next();remove();这3给方法~~

Iterator接口的remove方法可以删除的是next()最新返回的项,此后不能继续调用,除非发生下次next()

Collection接口

Collection接口为我们常用的几个集合接口的父类.它继承了Java.util包
提供了包括上面Iterable中提到的remove(),iterator()方法,另外还有像size();clear();isEmpty()等方法

  1. [ 那么我们不难发现,在上面提到的2个借口中都有remove方法,这2个接口中的方法有什么区别呢?]
    第一点,从性能方面上看,我们可以观察二者的运行机制.Collection中remove方法采取的是类似for循环的查询去找到你传输进来的Object对象,然后再去删除;而iterator中的remove,则是调用了next()方法,去寻找下一个找到了就直接删除,所以说iterator的性能更高
    第二点呢,再容错方面iterator就不会报错,而如果用Collection的remove ()方法的话就可能会产生错误,以为采用list.iterator()方法得到的会是一个新的iterator对象,会产生2个对象,而下面的遍历如果调用Collection中的remove方法就会去对新对象进行操作,老对象不变

子接口(List,Set,Queue)

集合Collenction接口下面包含了多个子接口,那么就我们常用的这些接口来分析一下

List接口

List的特点:可以有重复的值,有顺序
而list下面包含的Array List和LInked list又有其不同的优点

  1. Array List查询快,就是指get()和set()花费时间快
  2. 那么LInked list相对应就是说对数据的操作快,增删改快

不过,在项目中我们大部分都是用的Array list,不过,在项目中我们大部分都是用的Array list

Set接口

Set的特点:数据不能重复,无序,子集合有3个分别是

  • HashSet速度最快
  • TreeSet按升序排列
  • LinkedHashSet按插入顺序保存的对象
Queue接口

队列,存储的是对话信息
队列执行流程

Map接口

区别于Collection以外的另一种集合形式,采用键值对的形式存储数据,键可以重复值不能重复.
既然如此,我们不由可以联想到Set和Array list的特点,如此我们就能吧Map的键类比为Set形式,而值就可以类比为Array list的储存形式
下面我们来介绍一下它的子接口

  • HashMap:访问速度最快,无序
  • TreeMap:按升序排列
  • LinkedHashMap:按插入顺序保存键,同时保留了HashMap的访问速度
综上.下面整理了一些可能会遇到的问题,遇到了我们该就哪些方面进行回答呢
  1. 数组Array和集合ArrayLIst有什么区别

1.Array的长度固定,而ArrayList的长度是可变的
2.Arrat只能存储单一类型的数据,而ArrayList可以存储多种类型的值,不过在项目中我们一般会为了安全性考虑而填写泛型来限定它的值类型

ArrayLIst的扩容问题:初始大小是10,增长1.5倍
补充:HashMap的扩容16 0.75 12 2倍 2的n次幂

2.将数组作为集合,将集合转为数组分别调用什么方法

数组做集合用Arrays.asList();集合转数组用List.toArray(),

3.HashMap和HashSet的区别

1.实现了不同的接口,一个是Map接口一个是Set接口
2.存储数据的类型不一样,一个是键值对一个是对象
3.存值的方法不一样,一个是put方法一个是add方法
4.计算hashcode的参数不一样,HashMap用key去计算
5.访问速度不一样,HashMap速度快

补充:HashMap的实现原理
存储对象时,为了方便后面的查询,都会存在一个bucket位置,而HashMap就是通过键去调用hashcode方法计算hash而得到这个bucket的,而进行扩容时参考的也是bucket的占有情况,HashMap键值对就是通过键计算出bucket位置再调用equals()方法来查询出值的

4.LIst.Set,Map的区别

值:LIst可以重复,Set不能重复,Map键唯一,值可以重复(参考Map键值对形式的类比)
出List外都是无序存值

补充 Vector

Vector 基本上很少用到了,和ArrayList很相似,唯一的不同是Vector的方法都是线程安全的,而Array List是非线程安全的,从这点上来说,ArrayList的效率要比Vector的效率高,另外Vector是以2倍的方式扩展数组容量的