集合大家族

今天看到了一张集合的图,想着有空了进行整理整理,前面高能,哈哈哈哈

看图:

我们可以看到在集合(容器)的左右都有接口,而右边的偏多,这张图总结了各个接口的优缺点以及面试中会遇到的问题。

右边:

Iterable:iterable是iterator(迭代器)的父类,实现了iterable接口的类都可以拥有增加for循环,也就是有foreach循环;另外这个类还必须提供一个名为iterator()的方法,返回iterator.那么没有继承iterable的就没有iterator()方法了吗?不!还有Map,Map虽然单独在一块,但也有iterator()方法

iterator:迭代器主要是循环数据,提供了三个方法,hasNext(),next(),remove()。

Collection:Collection是list,set,queue的父类,Collection主要的方法有add(),remove(Object),clear()等,那么Collection的remove(Object)方法和iterator的remove()方法有什么区别呢?

1、前者的remove方法有参数,iterator的remove方法是没有参数的

2、性能方面。Collection的方法在移除数据时会将数据一次一次的遍历,直到找到要移除的数据,这样速度慢,性能就差,而且还可能出现异常;iterator的方法遵循着“守株待兔的原则”,来一个对象就移除一个对象,因此速度快,性能好。

3、容错方面。Collection的remove是单链表结构,当移除掉前面的一个对象时,就会出现异常,若移除掉后面的对象,就不会出现异常;而iterator的remove方法就是来一个对象移除一个对象,所以不会出现异常。

List: list集合是一个有序集合,也就是可重复,有顺序,有下标。List下分为ArrayList ,LinkedList

ArrayList与LinkedList有什么区别 ? 

相同点:ArrayList与LinkedList的线程不安全

不同点:

1、ArrayList是以数组的方式存储数据的;LinkedList是以双向链表的方式存储数据。

2、在项目中查询的功能很多,用的就是ArrayList;LinkedList一般用于增删改,但和项目中的增删改没有关系。

Set: set是一个无序集合,与list集合相反。set下分为HashSet,TreeSet,LinkedHashSet。HashSet主要是增删改查的速度快,是无序的,集合元素可以是null,但只能放入一个null;TreeSet:是为了提供set的不足,所以TreeSet是有顺序的;

Queue: queue是队列,一种先进先出的数据结构,像在火车站排队进站,先验证完毕的先进站。

Map:map是一个单独的接口,是以键值对的方式存储数据,可以将map理解成是list和set的假小三,但又和他们没有任何关系。因为map的键是可以不可以重复的,不能为空,这就相当于set,而值是可以重复的,可为空,相当于set。map和list,set没有关系。 map下分为HashMap,TreeMap,LinkedHashMap,优缺点可以参考set集合。HashMap的扩容,hashMap的初始容量默认为16,当初始容量达到了75%的扩容因子,那么就要扩容,通常是以2的n次方方式进行扩容。

array和ArrayList的区别?

1、array是数组,有固定的长度和数据类型

2、ArrayList是集合,长度可变,数据类型可变,ArrayList可以说是动态的数组。

扩展:

Queue(队列,先进后出),message(消息),Lopper(循环),Handler(处理)

 我可能是灵魂画手,哈哈哈

     当访问某一个网页,线程中分为两个:主线程,子线程。相当于警察(主)和小偷(子),小偷是个卧底。Looper通过for循环从queue中拿到某一个msg,在将消息传给子线程,子线程将消息交给Handler处理,Handler在交给主线程。所以我们加载网页时会有数据先出来,没有加载出来的在慢慢加载。

猜你喜欢

转载自blog.csdn.net/oydl_1234/article/details/88146026