集合的思维导图
ArrayList和LinkList的区别
ArrayList(数组结构):
优点:查询速度快;缺点:增删改速度慢
LinkedList(链表结构):
优点:增删改速度快;缺点:查询速度慢
Collection接口的remove()方法和Iterator接口的remove()方法区别?
①性能方面:
a.Collection的remove方法必须首先找出要被删除的项,找到该项的位置采用的是单链表结构查询,单链表查询效率比较低,需要从集合中一个一个遍历才能找到该对象;
b.Iterator的remove方法结合next()方法使用,比如集合中每隔一项删除一项,Iterator的remove()效率更高
②容错方面:
a.在使用Iterator遍历时,如果使用Collection的remove则会报异常,会出现ConcurrentModificationException,因为集合中对象的个数会改变而Iterator 内部对象的个数不会(就是改变了下标),不一致则会出现该异常
b.在使用Iterator遍历时,不会报错,因为iterator内部的对象个数和原来集合中对象的个数会保持一致
Array与ArrayList有什么区别
①Array是Java中的数组,声明数组有三种方式
int[] a=new int[10];
int a[]=new int[10];
int a[]={1,2,3,4};
ArrayList是动态数组,也就是数组的复杂版本,,它可以动态的添加和删除元素,被称为”集合“,集合的声明如下
ArrayList list = new ArrayList(10);
ArrayList<Integer> list1 = new ArrayList<Integer>();
②存储的数据类型:Array只能存储相同数据类型的数据,而ArrayList可以存储不同数据类型的数据
③长度的可变:Array的长度是固定的,而ArrayList的长度是可变的
怎样将一个数组转成List,有什么方法
public static void main(String[] args) {
// 数组转List
String[] str = {"a","b","c"};
List<String> strings = Arrays.asList(str);
System.out.println(strings);
// 注意:当数组转成list之后,list是不能操作add、remove等操作
// strings.add("good");//会报错
// 如果想要操作add、remove等操作,则需要:
List<String> newStrs = new ArrayList<String>();
newStrs.add("good");//此为正确的
}
public static void main(String[] args) {
// List转数组
List<String> str = new ArrayList<>();
str.add("you");
str.add("and");
str.add("me");
String[] strs = str.toArray(new String[str.size()]);
}
HashSet、TreeSet、L inkedHashSet区别?
①.需要速度快的集合,使用HashSet
②.需要集合有排序功能,使用TreeSet
③.需要按照插入的顺序存储集合,使用LinkedHashSet
HashMap、TreeMap、linkedHashMap区别?
①.在Map中插入、删除和定位元素,HashMap是最好的选择
②.需要集合有排序功能,使用TreeMap更好
③.需要按照插入的顺序存储集合,使用LinkedHashMap
HashMap和HashSet区别
①HashMap实现了map接口,HashSet实现了set接口
②HashMap是以键值对的形式存在,HashSet是以对象存储的
③HashMap是用put()增加值的,HashSet是以add()增加的
④HashMap使用key计算hashcode,HashSet使用成员对象计算hashcode
⑤HashMap相对于HashSet较快,因为它是使用唯一的键获取对象,HashSet较HashMap来说比较慢
HashMap的实现原理
HashMap主要是根据bucket(水桶)自动调整容量,HashMap的扩容公式:16x0.75=12
16指的是默认初始化的容量大小,可以改变;
0.75指的是当容量大小达到原来的75%时开始扩容,即达到12的时候
List、Set、Map之间的区别
queue的知识
queue、message、looper、handler的关系
queue是队列的意思,当从数据库拿消息时,用looper进行循环遍历,拿到的msg给子线程执行,然后子线程通过handler这个通信机制将msg展示在UI。
讲项目的技巧
①项目开发背景(是给谁用,用来干嘛的)
②项目模块(判断出项目的大小)
③说明自己负责的模块
④这个项目的收获(突出以前不会--》现在会)
⑤做这个项目遇到的bug,说出解决方案