这几天有时间整理了一下java集合:
1、集合思维导图:
2、queue,message,looper,handler
queue(管道,队列<先进先出>)message(信息)looper(循环)handler(处理,线程间的通讯机制)
线程主要分两种,一种是主线程,一种是子线程,主线程主要负责更新UI,子线程主要负责执行耗时操作
子线程调用looper循环拿到queue里面的message,拿到的message传给子线程,子线程通过handler,把接收到的数据交给给主线程
3、Collection的remove()和iterator的remove()的区别:
①有参无参的区别:collection的remove()是有参的,iterator没有
②性能方面:collection的remove()必须找出要被删除的项(单链表查询结构,需要从集合一个一个的去遍历找到它,效率低)
iterator的remove()结合next()使用(比如说:集合中的隔一个删一个,效率更高)
③容错方面:在使用iterator遍历时,如果使用collection的remove()可能会报异常(concurrentModificationException)因为集合中对象的个数会改变而iterator内部对象的个数不会,不一致则会出现改异常。
(例如,集合中存放了小明,小红,小兰,它们分别对应的下标分别是0,1,2,对这个集合进行 iterator遍历,如果用collection的remove()移除小红,那么集合将变成小明和小兰,对应的下标为0,1如果这时候删除小兰的话,那么它移除对应的下标应该是1,但是进行了iterator遍历,iterator内部对象的个数不会保持一致,它找不到下一个值,所以它会报错,如果删除的是小兰的话,则没有影响,小明和小红对应的下标还是0,1)
在使用iterator遍历时,用iterator的remove()则不会报错,因为iterator内部对象个数和原来集合中对象的个数会保持一致
5、怎么将一个数组转成List,或者将list转成数组
①:数组转list:arrays.asList(数组)
②:list转数组:list.toArray(new xxx[集合的长度])
6、hashSet、TreeSet、LinkedHashSet区别
①:需要速度快的集合,使用hashSet
②:需要集合有排序功能,使用treeSet
③:需要按照插入的顺序存储集合,使用linkedHashSet
6、hashSet、TreeSet、LinkedHashSet区别
①:需要速度快的集合,使用hashSet
②:需要集合有排序功能,使用treeSet
③:需要按照插入的顺序存储集合,使用linkedHashSet
hashMap和hashSet的区别
List、Set、Map之间的区别
List:值可重复、有序、可以插入多个null值
Set:值不可重复、无序、只能插入一个null值
Map:键可重复,值不可重复,无序,键只能插入一个null值,值可以插入多个null值