Java基础面试题11-15道
名言警句: 不积跬步,无以至千里,不积小流,无以成江海
11.java 中 IO 流分为几种?
- 按照宏观区分
输入流和输出流 - 按照类型区分
字节流和字符流 - 流 的概念:
指的是对一个输入输出源进行数据输入输出的流的操作,就是对数据流的不同操作- 区别:
InputStream/Reader:输入流,分别是 字节流和字符流
outputStream/Writer:输出流,分别是字节流和字符流
- 区别:
12.Files的常用方法都有哪些?
- File.exists() 判断文件路径是否存在
- file.existsDirectory() 判断文件夹是否存在
- file.delete() 删除文件
- file.copy() 复制文件
- file.move();移动文件
- file.size(); 包含文件的个数
- file.reader() 读取文件
- file.writer();写入文件
13.java 容器都有哪些?
- list(有序,可以重复)
- ArrayList
- LinkedList
- Vectory
- set(无序,不能重复)
- HashSet
- TreeSet
- Queue(队列)
- ReqQue
- Map (无序,不能重复)
- HahsMap
- LinkedHashMap
- Hashtable
14.Collection 和 Collections 有什么区别?
- Collection是一个顶层集合接口,是List和set的父类
- Collections:是操作Collection集合的工具类,提供一系列的静态方法(搜索,排序,二分查找,线程安全化等)
15.List、Set、Map 之间的区别是什么?
- List:是有序存储数据,并且数据可以重复
- ArrayList:底层采用的数组,查询数据快,插入和删除数据慢,jdk1.8中ArrayList的扩容方式 通过调用grow()方法,中调用CapaCity=new Capacity+(OldCapacity>>1),进行扩容(1.5倍扩容量)进行扩容,然后调用Arrays.copyOf对原数组进行复制
- LinkedList:底层采用的是链表,查询数据慢,插入和删除数据快
- Vectory:底层采用的是数组,查询数据快,插入和删除数据慢,线程安全的
- Set:采用散列数据(HashCode)进行存储数据,所以是无序的,并且不能有重复的数据
- HashSet:使用Hash算法进行数据存取,存取速度快,当数据存储 超过默认值(loadFactor 0.75),会以近似两倍的方式进行扩容
- TreeSet:实现了SortMap接口,TreeSet是有序的
- Map
-
HashMap:底层整体结构采用数组方式存在,每一个元素采用链表的方式存储数据
1.存储原理:当往HashMap中添加一个元素的时候,会通过hash算法计算key的值,得到数组的下标,
当数组下标存在的时候,这个添加的元素会以链表的形式存在,最新添加的放在链表
头,最开始添加的放在链表的最后,如果下标不存在,直接放该在位置
2.去重原理:hash算法,计算key值相同的概率非常小,如果添加一个元素key通过hash算法,计算得到下标,
如果下标相同,在该位置计算key值是否相同,如果相同,则覆盖值,不同则直接以链表的形式加入
3.获取原理:get通过key获取值,key通过hash算法得到,数组的下标,获取该数组元素,在通过key从该链表上获取对应的值
4.扩容原理:当数组中存储的时间超过(loadFactor 0.75倍),hashMap会以两倍的方式进行扩容 -
LinkedHashMap:原理和HashMap类似,当遍历的时候,其顺序是插入数据的顺序
-
TreeMap:基于红黑树的实现
-