做题笔记(Java相关)

Java

线程安全

Vector、HashTable、Stack、Enumeration、StringBuffer、Properties

JUC中的集合类:LinkedBlockingQueue、Concurrent-等

Collections 类提供了synchronizedXxx()方法,可以将指定的集合包装成线程同步的集合,比如:

List  list = Collections.synchronizedList(new ArrayList());

Set  set = Collections.synchronizedSet(new HashSet());

ThreadLocal把每个线程的私有数据存放在ThreadLocalMap中。

子类能继承父类的所有成员(private方法和属性是可以继承的,只是不能调用。构造函数不是成员,所以它们不被子类继承,但是可以从子类调用超类的构造函数。)

抽象类和接口

jdk1.8 接口可以有default、static方法

HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键, 而应该用containsKey()方法来判断。Hashtable不允许存入null。

switch支持 int及以下(int,char, short, byte),String(java7), Enum,不能是long,float,double和boolean类型。

volatilesynchronized的区别

  • volatile仅能使用在变量级别;synchronized则可以使用在变量方法代码块级别的。

  • volatile仅能实现变量的修改可见性,不能保证原子性;而synchronized则可以保证变量的修改可见性和原子性

  • volatile不会造成线程的阻塞;synchronized可能会造成线程的阻塞

final作为对象成员存在时,必须定义时初始化(不会取默认值)在构造函数中初始。

类初始化顺序:父类静态域(静态变量和静态代码块按位置顺序)-》子类静态域 -》父类代码块 -》父类构造函数 -》子类代码块 -》子类构造函数

InterruptedException的代表方法有:

1.Java.lang.Object类的wait方法

2.Java.lang.Thread类的sleep方法。

3.Java.lang.Thread类的join方法

Throwable异常

try catch中多个catch会进入最先满足的那个,所以要子异常在前父异常在后

 采用 + 运算符拼接字符串/基本类型时:

  • 如果拼接的都是常量(字面量或final),则在编译时编译器会将其直接优化为一个完整的字符串,和你直接写一个完整的字符串是一样的,所以效率非常的高。

  • 如果拼接的字符串中包含变量,则在编译时编译器采用StringBuilder对其进行优化,即自动创建StringBuilder实例并调用其append()方法,将这些字符串拼接在一起,效率也很高。但如果这个拼接操作是在循环中进行的,那么每次循环编译器都会创建一个StringBuilder实例,再去拼接字符串,相当于执行了 new StringBuilder().append(str),所以此时效率很低

Java集合类 

参考Java集合容器面试题(2020最新版)_ThinkWon的博客-优快云博客_java集合

重点:HashMap 

Iterator 接口提供遍历任何 Collection 的接口。 只能单向遍历,但更加安全,因为它可以确保在当前遍历的集合元素被更改时,抛出 ConcurrentModificationException 异常。(边遍历边修改 Collection 的唯一正确方式是使用 Iterator.remove() 方法)

foreach 循环遍历。foreach 内部也是采用了 Iterator 的方式实现,优点是代码简洁,不易出错;缺点是只能做简单的遍历,不能在遍历过程中操作数据集合,例如删除、替换。

为什么HashMap比HashSet快?

HashSet底层由HashMap实现,只用Key存数据,Value默认存PRESENT空对象;而HashMap的Key一般为String或Integer类型,Value存数据,因此计算hashcode时一般String或Integer类型快,而存的数据(对象)慢。

参考“为什么HashMap比Hashset快” 凭什么这么说?_2003Crimson的博客-优快云博客_hashset和hashmap效率

常用方法:

ArrayList: get  add  remove  size  set  contains  toArray(Arrays.asList())

Stack:  push  pop  peek(不删)

LinkedList:  offer poll

HashSet:  add  contains  remove

HashMap:  put  get  remove  replace  containsKey  containsValue  keySet  values

~n=-n-1

int a=0xFFFFFFF1;//补码表示 最高位符号位 负数原码等于补码取反(除符号位)加1 a=-15
int b=~a;//b=-a-1=15-1=14

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值