java面试题:集合

1.如何理解java中的序列化

在Java中,

序列化是指将对象转换为字节流的过程,可以将这些字节流保存在文件中、在网络上发送或者在内存中传输。

序列化的主要目的

是实现对象的持久化(保存到磁盘或者数据库中)、对象的传输(通过网络传输对象)、对象的克隆等。

Java中的序列化可以通过实现Serializable接口来完成,该接口是一个标记接口,没有任何方法需要实现。如果一个类实现了Serializable接口,就表示该类的对象可以被序列化。

当一个对象需要被序列化时,**会将对象的状态以及相关的类信息转换为字节流。**这些字节流可以通过流的方式写入文件或者通过网络进行传输。反序列化则是将字节流重新转换为对象。

在序列化的过程中,如果对象的某些属性不希望被序列化,可以使用transient关键字修饰这些属性,这样在序列化时会忽略这些属性。

需要注意的是,序列化和反序列化的过程是Java对象和字节流之间的转换,所以只有Java环境下才能进行序列化和反序列化操作。

总之,通过序列化,可以将对象转换为字节流,实现对象的持久化、传输和克隆等功能

3.java中HashMap的工作原理是什么

HashMap是Java中常用的数据结构,它是基于哈希表实现的。

在HashMap中,数据是以键值对(Key-Value)的形式存储的。每个键对应一个唯一的值,通过键可以快速地获取对应的值,从而实现高效的查找操作。

HashMap内部通过一个数组来存储数据,这个数组被称为哈希表。当我们要将键值对存储到HashMap中时,首先会根据键的hashCode值计算出数组下标,然后将键值对存储到该下标对应的位置。

具体的步骤如下:

  1. 当向HashMap中添加一个键值对时,首先会调用键的hashCode()方法来计算哈希码。哈希码是一个整数,用于确定键值对在数组中的位置。
  2. 然后,根据哈希码使用哈希函数(通常是取模运算)计算出数组下标。不同的哈希函数可能会得到相同的下标,这种情况称为哈希冲突。
  3. 如果发生哈希冲突,HashMap会使用链表或红黑树来解决冲突。在Java 8之前,HashMap使用的是链表解决冲突,当链表长度超过一定阈值(默认为8)时,会将链表转换为红黑树,以提高查找效率。而在Java
    8及之后的版本中,如果链表长度小于等于6,会将红黑树转换回链表,以节省空间。
  4. 当需要获取某个键对应的值时,HashMap会先通过键的hashCode()方法计算哈希码,然后根据哈希码找到数组中的位置。如果该位置上有链表或红黑树,会通过键的equals()方法遍历链表或红黑树,直到找到对应的值。

总结起来,HashMap的工作原理可以简单归纳为:通过哈希码和哈希函数将键值对映射到数组中的位置,并使用链表或红黑树解决哈希冲突,以实现快速的查找操作。

7.hashset 和 treeset有什么去别并举例说明

HashSet和TreeSet都是Java中常用的Set集合实现类,它们之间的主要区别在于底层数据结构和元素排序方式。

  1. HashSet:
  • 底层数据结构:HashSet使用哈希表作为底层数据结构。
  • 元素唯一性:HashSet保证集合中的元素是唯一的,不允许重复。
  • 元素顺序:HashSet中的元素是无序的,添加和获取元素的顺序可能不同。元素重复就不会被添加
  • 例子:
java 复制代码
HashSet<String> set = new HashSet<>();
set.add("apple");
set.add("banana");
set.add("orange");
set.add("apple"); // **重复元素,不会被添加进集合**
System.out.println(set); // 输出结果可能为 [banana, apple, orange]
  1. TreeSet:

底层数据结构:TreeSet使用红黑树作为底层数据结构。

  • 元素唯一性:TreeSet保证集合中的元素是唯一的,不允许重复。
  • 元素顺序:TreeSet中的元素是有序的,默认按照元素的自然顺序进行排序。也可以通过实现Comparable接口或传入比较器(Comparator)来指定自定义的排序方式。
  • 例子:
java 复制代码
TreeSet<Integer> set = new TreeSet<>();
set.add(3);
set.add(1);
set.add(2);
set.add(1); // 重复元素,不会被添加进集合
System.out.println(set); // 输出结果为 [1, 2, 3]

需要注意的是,当使用自定义的对象作为元素时,需要根据对象的hashCode()和equals()方法来确保元素的唯一性,以及根据compareTo()方法或比较器来实现元素的排序。

9.请举例说明collection 和conllections的区别?

Collection和Collections是Java中两个不同的概念。

  1. Collection:
  • Collection是Java中的一个接口,它是Java中所有集合类的父接口。它定义了一系列操作集合的方法,如添加、删除、遍历等。
  • Collection接口的常见实现类有List、Set和Queue。
  • 例子:
java 复制代码
Collection<String> collection = new ArrayList<>();
collection.add("apple");
collection.add("banana");
collection.add("orange");
System.out.println(collection); // 输出结果为 [apple, banana, orange]
  1. Collections:
  • Collections是Java中的一个工具类,提供了一系列操作集合的静态方法。它包含的方法可以用于对集合进行排序、搜索、反转等操作。
  • Collections类中的方法都是静态方法,可以直接通过类名调用。
  • 例子:
java 复制代码
List<Integer> list = new ArrayList<>();
list.add(3);
list.add(1);
list.add(2);
Collections.sort(list); // 对集合进行排序
System.out.println(list); // 输出结果为 [1, 2, 3]

总结:

  • Collection是一个接口,定义了集合类的基本操作。
  • Collections是一个工具类,提供了一系列操作集合的静态方法。
  • Collection用于操作集合类的对象,而Collections用于操作集合类的工具方法。
相关推荐
0白露1 小时前
Apifox Helper 与 Swagger3 区别
开发语言
Tanecious.2 小时前
机器视觉--python基础语法
开发语言·python
叠叠乐2 小时前
rust Send Sync 以及对象安全和对象不安全
开发语言·安全·rust
战族狼魂2 小时前
CSGO 皮肤交易平台后端 (Spring Boot) 代码结构与示例
java·spring boot·后端
Tttian6223 小时前
Python办公自动化(3)对Excel的操作
开发语言·python·excel
xyliiiiiL3 小时前
ZGC初步了解
java·jvm·算法
杉之4 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
hycccccch4 小时前
Canal+RabbitMQ实现MySQL数据增量同步
java·数据库·后端·rabbitmq
独好紫罗兰4 小时前
洛谷题单2-P5713 【深基3.例5】洛谷团队系统-python-流程图重构
开发语言·python·算法
天天向上杰5 小时前
面基JavaEE银行金融业务逻辑层处理金融数据类型BigDecimal
java·bigdecimal