java面试---java基础+容器

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) 方法来创建一个只读集合,修改时会剖出异常

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值