某家公司,后面都用A来表示。技术面试面到三面时,面试官问了我几个问题,一时间难以回答,特此记录留存。
Java的参数传递
Java的参数传递是值传递
总结:Java中只有一种传参方式,值传递。值传递是指对参数进行传参时,复制一份传到函数里,函数内对参数的变更,并不会影响到实际参数。
Java中的基础数据类型包括八种
首先,对于基础数据类型,毋庸置疑,在函数内对数据进行修改不影响对象的值; 比较复杂的是引用类型,如果传递的是对象,实际函数观察到的结果是如果对对象的值进行修改,那得到的值是修改的,这是为什么呢? 因为传递的是对象的地址,函数实际过程中并未对对象的地址进行修改,只是对对象的值修改了,于是看到的结果就是对象的值有变更。
String类型较为特殊,String是个对象,但是String内部被final所修饰,于是对String重新赋值相当于重新创建一个String地址,函数内相当于改变了String的地址,并不会修改实际参数的值。
HashMap的无序性
问题1:HashMap用entrySet遍历时的顺序是什么?
答:HashMap的实现形式是数组+链表,entrySet的遍历顺序是根据数组里数据的存储顺序,先遍历数据,再遍历链表。
问题2:和插入的顺序一致吗?
答:HashMap并不能保证数据的插入顺序和entrySet的遍历顺序一致.这是因为HashMap在数据插入时,是根据key的hashcode与数组的长度位运算,计算出最后放置的位置,遍历数据和key有关,因此插入数据和遍历数据并不能保证一致,所以我们常说HashMap是无序的。
问题3:如果想保证插入顺序和遍历顺序一致,应该怎么实现呢?
答:可以采用LinkedHashMap,LinkedHashMap通过维护一个额外的双向链表保证了迭代顺序,如图所示:
附录: 1、java中的参数传递 blog.csdn.net/LogoBeng/ar…