1、jdk和jre有什么区别?
jdk java开发工具
jre java运行环境
jdk包含jre、java编译工具javac及java程序调试及分析工具。
2、==和equals()区别
==是引用比较
equals是值比较
3、两个对象hashcode值相同,equals()不一定为true
4、final在java中有什么作用?
类:不能继承
方法:不能修改
变量:不能修改,常量
5、java中Math(-1.5)等于多少?
-1 向右取整
6、java基础类型:byte、boolean、char、short、int、float、long、double String属于对象
7、java中操作字符串有哪些类?
String 声明对象不可变
StringBuffer 对象可变,线程安全,效率低
StringBuilder 对象可变,非线程安全,效率高
8、String str=“i”和String str=new String(i)不一样
一个是常量,分配到常量池中
一个是对象,分配到堆内存中
9 、java字符串翻转reverse()
10、String 类常见方法
charAt()
toUpperCase()
toLowerCase()
11、抽象类不一定有抽象方法,抽象类不能实例对象
12、普通类不能含抽象方法,抽象类可含抽象方法
抽象类不能实例化,普通类可以实例化
13、抽象类不能用final修饰,抽象类就是被用来继承的
14、接口和抽象类
关键字 :extends implement
抽象类有构造函数,接口没有
类可以有多个接口,但只能继承一个抽象类
接口默认public修饰,抽象类都可以
15、java中IO流
功能:输入、输出
大小:字节流(8字节)、字符流(16字节)
16、BIO、NIO、AIO
BIO:同步阻塞式IO,简单使用方便,并发处理能力低
NIO:同步非阻塞IO,客户端服务端通过channel通讯,多路复用
AIO:异步非阻塞IO,异步IO操作基于事件和回调机制
17、Files常见方法
18、java容器:Collection和map
Collection包括list和set
List:ArrayList/LinkedList/Vector/Stack
Set:HashSet/LinkedHashSet/TreeSet
Map包括
HashMap:LinkedHashMap
TreeMap
ConcurrentHashMap
Hashtable
19、Collection和Collections区别
Collection是一个集合接口,提供通用接口方法,所有集合都是它的子类,比如List、set
Collections是一个包装类,包含了很多静态方法,不能被实例化,比如Collections.sort(list)
20、List:元素有序、允许元素重复
Set:元素有序,不允许元素重复
Map:key唯一,value可重复
AbstractMap、HashMap元素无序,TreeMap、TreeSet元素有序(二叉树排序)
21、hashmap 中key和value为空,hashtable不允许key和value为空
hashtable线程安全,hashmap非线程安全
hashtable是保留类不建议使用,hashmap单线程使用,concurrenthashmap多线程
22、如何决定使用hashmap还是treemap
hashmap插入更快
treemap有序遍历
23、hashmap实现原理
hashmap是基于hash算法实现的,通过put(key,value)存储,get(key)来获取。当传入key时,hashmap会根据key.hashCode()计算出hash值,根据hash值将value保存到bucket里。当计算出的hash值相同时,我们称之为hash冲突,hashmap做法是用链表和红黑树存储相同hash值得value,冲突少使用链表否则用红黑树。
24、hashset
基于hashmap实现,不允许值重复
25、ArrayList基于动态数组实现,频繁读取
LinkedList基于链表,插入和删除
26 数组和链表转换
Array.asList(array)
List自带toArray()方法
27、ArrayList和Vector
Vector使用Synchronized来实现线程同步,是线程安全的,而ArrayList是非线程安全的
ArrayList在性能方面优于Vector
扩容:Vector增加1倍,ArrayList只会增加50%
28、Array和ArrayList有何区别?
Array可以存储基本数据类型和对象,ArrayList只能存储对象
Array是固定大小的,ArrayList大小自动扩展的
Array内置方法没有ArrayList多,比如addAll、removeAll、iteration等方法只有ArrayList。
29、在Queue中poll()和remove()有什么区别?
相同点:都是返回第一个元素,并在队列中删除返回的对象
不同点:如果没有元素poll()会返回null,而remove()会直接抛出nosuchElementException()异常
30、哪些集合类是线程安全的?
Vector、Hashtable、Stack都是线程安全的,而HashMap则是非线程安全的
31、迭代器Iterator时什么?
Iterator接口提供遍历任何Collection的接口,我们可以从一个Collection中使用迭代器方法来获取迭代器实例。迭代器取代了Java集合框架中的Enumeration,迭代器允许调用者在迭代过程中一出元素。
32、Iterator怎么使用?
List<String> list=new ArrayList<>();
Iterator<String> it = list.iterator();
while(it.hasNext())
{
String obj=it.next();
System.out.println(obj);
}
特点:更安全,可确保在当前遍历的集合元素被更改的时候,会抛出异常
33、Iterator和Listlterator有什么区别?
Iterator可遍历set和list集合,单向遍历
而listIteration只能遍历list,可双向遍历,从Iteration接口继承,添加了一些额外功能
34、怎么确保一个集合不被修改
可以使用 Collections. unmodifiableCollection(Collection c) 方法来创建一个只读集合,修改时会剖出异常