Java 核心面试题整理基础(1)

1. 遍历Map的几种方式?

1. 遍历Map集合需要用到的方法

  • public set keySet():将Map集合中所有的Key转存到一个set集合中.
  • public v get(object key):使用map集合中的get()方法通过map中的key获取其相应的value.
  • public set<Map.Entry<k,v>> entrySet():将map集合中键值对然后要象获取并存到set集合中.
  • public k getKey() : 通过此方法对键值对对象中的key进行获取.
  • public v getValue() : 通过此方法对键值对对象中的value进行获取.
  • public collection values() : 使用map中的values()方法将map集合中的所有value存到collection集合中.

2.遍历Map集合的几种方式

  • 第一种( keySet() ) : 先获取所有key的集合,然后遍历,并通过key去获取对应的值.
  • 第二种( entrySet() ) : 先获取所有键值对对象的集合,然后遍历并分别获取key和value.
  • 第三种( values() ) : 通过map中的方法获取map中所有的value,并遍历得到每一个value,此方法只能获取到value值.

3.通过代码演示以上几种遍历方式
要进行遍历的map集合

  • 第一种( keySet() ) :
    keyset方式
  • 第二种( entrySet() ) :
    entrySet
  • 第三种( values() ) :
    在这里插入图片描述

4.Map的实现类

  • TreeMap : 使用二叉树存储key-value.
  • HashTable : 版本比较低,线程是安全的,但是效率低.
  • HashMap : 使用比较多,线程是不安全的,但是效率高.
  • LinkHashMap : 底层使用链表来维护key-value的次序.
  • properties : 和map一样也是以key-value存储数据,如下图示例.
    properties示例

2.线程

1.线程的创建

(1) 继承Thread类

Thread类本质上其实是继承了Runnable接口,代表一个线程的实例,启动线程的唯一方法就是Threa类的start()方法,此方法将启动一个新的线程,并执行run()方法. 这种方式其实很简单,通过自己创建的类直接继承Thread类,并复写run()方法,然后在测试代码中声明自己创建的类,使用start()方法启动线程执行复写的run()方法.
继承Thread类

(2)实现Runnable接口

Java中的类继承属于单继承,当自己定义的类已经继承了一个类就无法继承Thread类,但是其仍然可以实现多个接口.
实现Runnable接口

(3) 实现Callable接口

实现Callable接口和实现Runnable接口很相似,区别就是Callable接口中需要重写的call()方法是有返回值的.
在这里插入图片描述

(4) 线程池方式

线程池其实就是容纳多个线程的容器,其中的线程可以重复使用,省去了频繁创建线程对像的操作,反复创建线程对象是非常耗费资源的.
线程池方式

2.Lock接口和synchronized解决线程安全问题时,优势是什么?

(1) 获取和释放锁的操作更加直观,锁运用更加灵活

Lock中的方法 : Lock() : 加锁. onLock() : 释放锁.

(2) 可以更加方便的实现公平锁

公平锁 : 线程获取锁的顺序是由线程加锁的顺序决定的,即先来先得.
非公平锁 : 一种对锁的抢占机制,是随机拿到锁的,也就是说会有一些线程是一直拿不到锁的,结果是不公平的.

3."=="、HashCode()、equals()的区别

1.单独说说"=="

如果"=="比较的是两个基本数据类型,那么其比较的是两个数据是否相等,如果比较的是两个引用数据类型,那么其比较的是两个数据的地址值。

2.HashCode()和equals()

(1) 类中没有重写此方法

HashCode()和equals()都是对地址值进行比较。

(2)类中重写此方法

HashCode():根据对象中的成员变量计算出一个hash值,然后进行比较。
equlas():比较的是两个对象中的成员信息是否相同。

注意:若是equlas()比较结果相同,则HashCode()比较结果一定相同。若HashCode()比较结果相同,equlas()比较结果不一定相同。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值