6.13
1.如何衡量什么时候用有序数组什么时候用无序数组
有序数组对元素的查找复杂度:O(log n) 无序数组对元素的访问复杂度:O(n)
有序数组对元素插入时候的复杂度O(n):需要对元素判断排序; 无序数组元素插入复杂度O(1)
2.java集合类框架最佳实践
一、已经知道集合内元素和长度已经固定就应该用Array而不用ArrayList
二、有些集合允许指定初始容量值 我们就可以首先设置集合容量值而避免重新计算Hash值或者扩容
三、为了类型安全、可读性、健壮性高 一般使用范型,而且范型还可以避免ClassCastException
四、底层集合是空的情况下,返回的是0的集合或者数组 不是null
3.Enumeration接口和Iterator接口的区别
1.Enumeration接口的速度是Iterator接口速度的两倍、占用内存更少
2.Iterator接口相对更加安全因为其他线程不能修改正在被Iterator遍历的对象,Iterator支持删除遍历集合的元素、Enumeration不支持。
4.HashSet和TreeSet的区别
1.HashSet的底层是Hash表,因此存储的元素是无序的,remove、contains、add等方法时间复杂度是O(1)
2.TreeSet的底层是树形村存储结构 元素存储是有序的,remove、contains、add等方法时间复杂度是O(log n)
5.java的垃圾回收与机制:GC(Garbage Collection)
垃圾回收的目的:用来识别并且丢弃应用不在使用的对象来释放资源
垃圾回收的时间:内存中如果存在没有引用的对象或者超过作用域的对象将被回收。
6.构造函数只能被调用,不能被继承。子类默认调用父类无参构造器,若父类没有无参构造器,子类需要用super()调用父类有参构造器,且super()位于子类构造器的第一行。
7.创建String对象:string内容是不可以改变的
第一种方式: String str1 = "aaa"; 是在常量池中获取对象("aaa" 属于字符串字面量,因此编译时期会在常量池中创建一个字符串对象),
第二种方式: String str2 = new String("aaa") ; 一共会创建两个字符串对象一个在堆中,一个在常量池中(前提是常量池中还没有 "aaa" 字符串对象)。
System.out.println(str1==str2);//false ( ==值相同 对象地址不想同)