2021-09-13

1. 对长度为n的线性表,在最坏情况下,比较次数:

快速排序、冒泡排序和直接插入排序:n(n-1)/2,

堆排序在最坏情况下的比较次数最少,是O(log2n)。

p.s. 快速排序最坏的情况是对有序数列排序,那么第一个元素需要比较n-1次,第2个元素需要比较n-2次,以此来推需要比较1,,,,n-1次等差数列求和得到(n)*(n-1)/2;

2. 数组初始化默认值
boolean数组初始化默认值为:[false, false]
byte数组初始化默认值为:[0, 0]
short数组初始化默认值为:[0, 0]
int数组初始化默认值为:[0, 0]
long数组初始化默认值为:[0, 0]
float数组初始化默认值为:[0.0, 0.0]
double数组初始化默认值为:[0.0, 0.0]
char数组初始化默认值为:[, ]
String数组初始化默认值为:[null, null]
3. 代码中注释太多,不会使编译后的程序尺寸变大

编写Java中的注释不会出现在可执行程序中。因此,可以在源程序中根据需要添加任意多的注释,而不必担心可执行代码会膨胀。

4. Object类包含的方法
1getClass获取运行时类型,返回值为Class对象
2hashCode返回该对象的哈希码值,是为了提高哈希表的性能(HashTable)
3equals判断两个对象是否相等,在Object源码中equals就是使用==去判断,所以在Object中equals是等价于==的,但是在String及某些类对equals进行了重写,实现不同的比较。
4clone此方法只实现了一个浅层拷贝,对于基本类型字段成功拷贝,但是如果是嵌套对象,只做了赋值,也就是只把地址拷贝了,所以没有成功拷贝,需要自己重写clone方法进行深度拷贝。
5toString返回一个String字符串,用于描述当前对象的信息,可以重写返回对自己有用的信息,默认返回的是当前对象的类名+hashCode的16进制数字。
6wait多线程时用到的方法,作用是让当前线程进入等待状态,同时也会让当前线程释放它所持有的锁。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,当前线程被唤醒
7notify多线程时用到的方法,唤醒该对象等待的某个线程
8notifyAll多线程时用到的方法,唤醒该对象等待的所有线程
9finalize对象在被GC释放之前一定会调用finalize方法,对象被释放前最后的挣扎,因为无法确定该方法什么时候被调用,很少使用。
5. java 形参和实参传递

1.java的基本数据类型是传值调用,对象引用类型是传引用。

2.当传值调用时,改变的是形参的值,并没有改变实参的值,实参的值可以传递给形参,但是,这个传递是单向的,形参不能传递回实参。

3.当引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会改变实参对象的内容。

 public static void main(String[] args) {
	// write your code here
        StringBuffer a = new StringBuffer("bi");
        StringBuffer b = new StringBuffer("li");
        operator(a, b);
        System.out.println(a+","+b); // bli,li
    }

    public static void operator(StringBuffer x, StringBuffer y){
        x.append(y);
        y = x;
  }
6. Thread类的实例方法

(1) Thread类的实例方法.
(2) start 和run
用start方法才能真正启动线程,此时线程会处于就绪状态,一旦得到时间片,则会调用线程的run方法进入运行状态。
而run方法只是普通方法,如果直接调用run方法,程序只会按照顺序执行主线程这一个线程。

7. ArrayList扩容

(1)无参构造:public ArrayList();
这种是默认创建大小为10的数组,每次扩容大小为1.5倍
(2)指定大小:public ArrayList(20);
这种是指定数组大小的创建,创建时直接分配其大小,没有扩充。

8. == 和equals

数值比较时:两者等价,比较的数值
对象比较时:如果equals不重写,两者等价,比较对象地址,即是不是一个对象

9. new String(“abc” + “ef”)+"gh"创建了几个对象
String str1 = "abc";  
// 创建0或1个对象,在常量池中

String str2 = new String("abc"); 
// 创建1或2个对象,若常量池无abc, 先在常量池中创建abc,再在堆中创建对象str2,将abc的引用赋值给str2

String str = "abc" + "def";  
// 创建了1个对象(因为编译时,编译器优化为abcdef)
String str = "abc" + new String("def");
// 创建了5个对象:
// 常量池中分别有“abc”和“def”
// 堆中对象new String("def")和“abcdef”
// 还有一个StringBuilder
// ⚠️注意:“abcdef”不在常量池中存

上述Java虚拟机在编译的时候会优化,会创建一个StringBuilder 的append()方法来进行字符串的拼接,实际效果类似:

String s = new String("def");
new StringBuilder().append("abc").append(s).toString();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值