java经典面试题集锦(带答案)(五)

本文详细介绍了Java中的List,Set,Map等基本数据结构,以及它们的使用场景、实现类及其特性,同时涵盖了String相关类的区别,线程同步(如HashSet与TreeSet、HashMap与HashTable),文件流与对象序列化,线程实现方式,以及线程间的同步控制方法。
摘要由CSDN通过智能技术生成

91.List、Set、Map是同一个接口吗?
不是,List、Set是Collection的子接口,Map是单独的
92.List、Set、Map如何使用?
List:用于有序可重复的集合
Set:无序无重复的集合
Map:键值对的集合
93.List的实现类有哪些?有什么区别?
LinkedList 线程不安全,不同步。是链表存储,用于插入和删除
ArrayList 线程不安全,不同步,是动态数组,实现数组的拷贝,用于遍历数据。增长数据为原来的一半
Vector 线程安全,同步,是多维数组,增长数据为原来的一倍
94.String、StringBuffer、StrngBuilder的区别
String为固定长度的字符串,当连接另一个字符串时,就会产生一个新的字符串
StringBuffer可变长度的字符串,线程安全,线程同步,需要向内存申请空间
StringBuilder可变长度的字符串,线程不安全,线程不同步,不需要向内存申请空间,自动增长
95.HashSet和TreeSet
HashSet线程不安全不同步,无序不重复
TreeSet线程安全同步,有序不重复
96HashMap和HashTable区别
HashMap线程不安全不同步无序,允许有空键值存在
HashTable线程安全同步无序,不允许有空键值存在
97.HashMap和Tree    Map区别
HashMap:哈希表存储,性能优越
TreeMap:二叉树存储
98.遍历HashMap
1)Map<String,StudentBean> map = new HashMap<String,StudentBean>();
Set<Map.Entry<String, StudentBean>> entryset = map.entrySet();    // 获取所有键值对
        for (Map.Entry<String, StudentBean> entry : entryset) {
            StudentBean stu = entry.getValue(); // 获取值
            System.out.println("键:" + entry.getKey() 
                    + "," +stu.getId()  + 
                    "," + stu.getName() + 
                    "," +stu.getScore());
        }
        Iterator<Map.Entry<String, StudentBean>> itor = entryset.iterator();
        while (itor.hasNext()) {
            Map.Entry<String, StudentBean> entry = itor.next();
            StudentBean stu = entry.getValue(); // 获取值
            System.out.println("键:" + entry.getKey() 
                    + "," +stu.getId()  + 
                    "," + stu.getName() + 
                    "," +stu.getScore());
        }
2)Map<String,StudentBean> map = new HashMap<String,StudentBean>();
Set<String> keyset = map.keySet();    // 获取所有键值
        for (String strKey : keyset) {
            StudentBean stu = map.get(strKey); // 根据key值获取map中key对应的值
            System.out.println(stu.getId()  + 
                    "," + stu.getName() + 
                    "," +stu.getScore());
        }
        Iterator<String> itor = keyset.iterator();
        while (itor.hasNext()) {
            StudentBean stu = map.get(itor.next()); // 根据key值获取map中key对应的值
            System.out.println(stu.getId()  + 
                    "," + stu.getName() + 
                    "," +stu.getScore());
        }
99.Map判断重复的键和值
map.containsKey("key1");
map.containsValue("value1");
100.流按照单位分为?
字符流和字节流
101.流按照方向分为?
输入流-->用于读文件
输出流-->用于写文件
102.如何拷贝一个文件?
创建File实例管理源文件,将file装入到FileInputStream中,将输入流对象装入到BufferedInputStream中,创建File实例管理目标文件,将file装入到FileOutputStream中,将输入流对象装入到BufferedOutputStream中,定义byte[1024]数组,用循环遍BufferedInputStream,调用read(byte[])判断每次读取的长度大于-1,并接收每次读取的长度。BufferedOutputStream的write(byte[],0,长度)方法,写入文件。提交BufferedOutputStream的缓存flush(),关闭BufferedOutputStream,FileOutputStream,关闭BufferedInputStream,FileInputStream。
103.如何实现对象序列化?
定义需要实例化的对象实现Serializable接口,利用ObjectInputStream和ObjectOutputStream实现对象的反序列化和序列101化
104.使用ObjectInputStream循环读取对象产生EOFException异常如何解决?
在利用ObjectOutputStream写入文件时,最末尾放入一个null值就可以了
105.实现线程的两种方式,并比较
继承Thread类,实现Runnable接口。
建议使用Runnable,类可以实现多个接口,但是只能继承单个类,所以可以让给其他类
106.线程和进程的区别
进程:占有空间,由多个线程组成,例如.exe等
线程:共享进程的空间,一个进程包含多个线程
107.sleep、join、yield的区别
sleep:线程会进入休眠状态,到时会自动唤醒
join:合并多个线程,当前线程执行完毕后,才会执行其他线程
yield:会让出一段时间,给同级别和更高级别的线程去执行
108.同步分为哪几种?如何使用?
方法锁和隐式锁
方法锁:在方法上设置同步,让用户能知道哪个方法设置了同步,但是多锁定一些无关的对象
隐式锁:在方法内锁定对象,锁定指定对象,但是用户不知道方法是否进行了同步
同步主要用于解决并发执行,例如:银行取款和存款,使用的就是同步,将账户进行同步.

后续会持续更新,完整资源已经上传,记得关注免费下载哦!

  • 11
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值