一、ArrayList和LinkedList的区别?

1、底层数据结构不一样,通过源码可以看出ArrayList是由数组实现的,相当于一个可变长度数组,但是LinkedList相当于使用链表实现的,同时从源码可以看到他具有头尾双向链表。
2、ArrayList支持随机访问,而LinkedList不支持。ArrayList源码中有一个接口叫RandomAccess,他是一个空接口,其实并不是说它没有用,应该只是用来告诉我们,它是支持随机访问的。
3、由于ArrayList底层数据结构是数组,所以它支持以下标索引方式查询,故查询速度更快,但是由于数据增删需要移动被修改项后面所有的项,导致效率较低。因此查找频繁,但不经常插入删除的场景中,推荐使用ArrayList,经常插入删除,推荐LinkedList。
4、占用内存不同,由于ArrayList中预留了一定的空间,创建ArrayList后实际占用的内存要更大,而LinkedList则是什么时候插入,什么时候开辟,所以空间更节省。

二、String、StringBuffer和StringBuilder的区别

String和StringBuffer, 如果用String+的方式,每循环一次,就会重新new一个StringBuffer对象,这样的内存消耗完全是不必要的,所以建议使用StringBuffer或者StringBuilder。而且StringBuffer提供了append方法,直接追加,然后可以使用toString转化为String。

StringBuffer和StringBuilder的区别在于是否线程安全,StringBuffer的线程安全在于它的源码中使用了大量的synchronize[ˈsɪŋkrənaɪz] 关键字,相比之下如果是非并发场景的话,StringBuilder会更快,需要线程安全场景的话,StringBuffer会更安全。

三、封装的特点

1.属性的私有化(private):隐藏对象的属性和实现细节,不允许从外部直接访问。
2.使用公开的方法访问和操作属性。
3.封装的操作对象是属性(将属性进行封装)。

四、封装的操作步骤(Eclipse)

1.将属性的修饰符设为私有(private)。
2. 按Shift+Alt+S,选择Generate Getters And Setters(生成get和set方法),勾选我们需要封装的属性,生成get和set方法。
3.在需要的地方调用set方法设值,调用get方法取值即可。

五、封装的目的

1.我们可以在方法中加入控制逻辑,如对手机号位数的限制等。
2.可以避免不合理的访问、可进行数据检查、可保证数据完整性。
3.便于后期修改,提高代码的可维护性。


软件测试工程师一只,也在不断的学习阶段,平时的小经验不定期分享。
博主经验有限,若有不足,欢迎交流,共同改进~
有意可加Q群 908417285 交流学习。
乾坤未定,你我皆是黑马