Java集合知识点(含源码)

在Java中,集合(Collection)是一种用于存储对象的数据结构,它提供了一种以更通用的方式存储和操作数据集合的方法。Java集合框架(Java Collections Framework)是一套提供了大量接口和类的体系,这些接口和类主要分为几个核心部分:集合接口(Collection interfaces)、实现(Implementations)、算法(Algorithms)和数组工具类(Array Utilities)。下面是对这几个部分的简要介绍和示例。

集合接口(Collection Interfaces)

  • Collection:所有单列集合的根接口。它声明了用于操作集合(如添加、删除、遍历等)的基本方法。
  • List:一个有序集合(也称为序列)。该接口的用户可以对列表中每个元素的插入位置进行精确控制,可以通过整数索引访问元素,并搜索元素。
  • Set:一个不包含重复元素的集合。它模拟了数学上的集合概念,不保证维持其元素的顺序。
  • Queue:一种用于在处理之前保存元素的集合。队列通常(但不一定)以先进先出的方式排序元素。
  • Map:一个对象映射到另一个对象的集合。它不能被分类为真正的Collection,但它是集合框架的一部分。

实现(Implementations)

Java集合框架提供了几个核心接口的具体实现:

  • ArrayListLinkedListList接口的可调整大小的数组实现和链表实现。
  • HashSetTreeSetSet接口的基于哈希表的实现和基于树的实现。
  • PriorityQueueQueue接口的基于优先级堆的枚举实现。
  • HashMapTreeMapLinkedHashMapMap接口的基于哈希表的实现、基于红黑树的实现和具有可预测迭代顺序的哈希表+链表实现。

算法(Algorithms)

Java集合框架提供了一系列算法,用于执行诸如排序和搜索等操作。这些算法作为静态方法在Collections类中提供。

数组工具类(Array Utilities)

Arrays类提供了一组静态方法,用来执行数组操作,如排序和搜索。

示例代码

这是一个简单的使用ArrayListHashSet的例子:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;public class CollectionExample {public static void main(String[] args) {// 使用ArrayListList<String> list = new ArrayList<>();list.add("Apple");list.add("Banana");list.add("Cherry");System.out.println("ArrayList: " + list);// 使用HashSetSet<String> set = new HashSet<>();set.add("Apple");set.add("Banana");set.add("Cherry");set.add("Apple"); // 重复元素将被忽略System.out.println("HashSet: " + set);}
}

这个示例展示了如何创建和使用ArrayListHashSet,以及HashSet如何自动处理重复元素。类似地,你可以根据需要使用其他集合类和接口。Java集合框架非常强大,提供了大量的功能来处理集合数据。### 面试题 1: 反转链表

题目描述:给定一个单链表的头节点 head,编写一个函数来反转链表,并返回反转后的链表的头节点。

示例代码

class ListNode {int val;ListNode next;ListNode(int x) { val = x; }
}public class ReverseLinkedList {public ListNode reverseList(ListNode head) {ListNode prev = null;ListNode current = head;while (current != null) {ListNode nextTemp = current.next;current.next = prev;prev = current;current = nextTemp;}return prev;}public static void main(String[] args) {// 示例使用// 创建链表 1 -> 2 -> 3 -> nullListNode head = new ListNode(1);head.next = new ListNode(2);head.next.next = new ListNode(3);ReverseLinkedList solution = new ReverseLinkedList();ListNode newHead = solution.reverseList(head);// 输出反转后的链表while (newHead != null) {System.out.print(newHead.val + " ");newHead = newHead.next;}}
}

面试题 2: 检查平衡二叉树

题目描述:给定一个二叉树,判断它是否是高度平衡的。对于此问题,一个高度平衡二叉树定义为一个二叉树,其中每个节点的两个子树的深度差不会超过 1。

示例代码

class TreeNode {int val;TreeNode left;TreeNode right;TreeNode(int x) { val = x; }
}public class BalancedBinaryTree {public boolean isBalanced(TreeNode root) {if (root == null) return true;int leftHeight = height(root.left);int rightHeight = height(root.right);return Math.abs(leftHeight - rightHeight) <= 1 && isBalanced(root.left) && isBalanced(root.right);}private int height(TreeNode node) {if (node == null) return 0;return 1 + Math.max(height(node.left), height(node.right));}public static void main(String[] args) {// 示例使用TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(2);root.left.left = new TreeNode(3);root.left.right = new TreeNode(3);root.left.left.left = new TreeNode(4);root.left.left.right = new TreeNode(4);BalancedBinaryTree solution = new BalancedBinaryTree();System.out.println("Is balanced: " + solution.isBalanced(root));}
}

面试题 3: LRU缓存机制

题目描述:设计并实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作:获取数据 get 和写入数据 put

获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。
写入数据 put(key, value) - 如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「密钥/数据值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。

示例代码

import java.util.LinkedHashMap;
import java.util.Map;public class LRUCache extends LinkedHashMap<Integer, Integer> {private int capacity;public LRUCache(int capacity) {super(capacity, 0.75f, true);this.capacity = capacity;}public int get(int key) {return super.getOrDefault(key, -1);}public void put(int key, int value) {super.put(key, value);}@Overrideprotected boolean removeEldestEntry(Map.Entry<Integer, Integer> eldest) {return size() > capacity;}public static void main(String[] args) {LRUCache cache = new LRUCache(2 /* 缓存容量 */);cache.put(1, 1);cache.put(2, 2);System.out.println(cache.get(1));       // 返回  1cache.put(3, 3);    // 该操作会使得密钥 2 作废System.out.println(cache.get(2));       // 返回 -1 (未找到)cache.put(4, 4);    // 该操作会使得密钥 1 作废System.out.println(cache.get(1));       // 返回 -1 (未找到)System.out.println(cache.get(3));       // 返回  3System.out.println(cache.get(4));       // 返回  4}
}

这三个面试题覆盖了数据结构和算法的基本概念,如链表、树、以及设计问题,这些都是软件开发面试中的热门话题。通过理解和练习这些题目,你可以提高解决问题的能力和编程技巧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749675.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【NTN 卫星通信】 TN和多NTN配合的应用场景

1 场景描述 此场景描述了农村环境&#xff0c;其中MNO (运营商TerrA)仅在城市附近提供本地地面覆盖&#xff0c;而MNO (SatA)提供广泛的NTN覆盖。SatA使用GSO轨道和NGSO轨道上的卫星。SatA与TerrA有漫游协议&#xff0c;允许:   所有TerrA用户的连接&#xff0c;当这些用户不…

【SecurityException: JCE cannot authenticate the provider BC 问题】自定义解决

SecurityException: JCE cannot authenticate the provider BC 问题 hutool.crypto.CryptoException: SecurityException: JCE cannot authenticate the provider BC 先分析异常描述解决方案 先分析异常的描述 JCE cannot authenticate the provider BC&#xff1a;在使用带…

git push解决办法:! [remote rejected] prod -> prod (pre-receive hook declined)

今天想把最近改的东西上传到Gogs上发版一下子的&#xff0c;但是发现有冲突合并不了&#xff0c;于是我切回自己的分支合并了prod&#xff0c;把冲突处理了一下子&#xff0c;还又增加了一点修改&#xff0c;push后.......又回到prod进行git push&#xff0c;哦豁~这就出了问题…

【Poi-tl Documentation】自定义行删除标签

前置说明&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency>模板样式&#xff1a; 删除行表格测试.docx 实现思路&#xff1a;通过定制占位…

【每日力扣】40.组合总和II与701. 二叉搜索树中的插入操作

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害。 40.组合总和II 给定一个候选人编号的集合 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为…

计算机网络——物理层(奈氏准则和香农定理)

计算机网络——物理层&#xff08;奈氏准则和香农定理&#xff09; 失真码间串扰奈氏准则&#xff08;奈奎斯特定理&#xff09;极限数据率 噪声信噪比香农定理奈氏准则和香农定理的区别 前面我们已经了解一些数据通信的基本知识&#xff0c;没有看过上一篇得小伙伴可以点击这里…

Android 系统的启动过程

Android 系统的启动流程&#xff1a; RomBoot&#xff08;只读存储器引导程序&#xff09;&#xff1a;这是设备上电时运行的初始软件。RomBoot执行基本的硬件初始化&#xff0c;确保硬件处于可以运行后续启动阶段的状态。这一阶段非常重要&#xff0c;因为它为整个启动过程奠定…

Educational Codeforces Round 163 (Rated for Div. 2) (A~C)

Educational Codeforces Round 163 (Rated for Div. 2) (A~C) 目录&#xff1a;A B C A题&#xff1a;Special Characters 标签: 暴力枚举&#xff08;brute force&#xff09;构造算法&#xff08;constructive algorithms&#xff09; 题目大意 构造一个字符串含有n个特殊…

LCD屏的应用

一、LCD屏应用 Linux下一切皆文件&#xff0c;我们的LCD屏再系统中也是一个文件&#xff0c;设备文件&#xff1a;/dev/fb0。 如果要在LCD屏显示数据&#xff0c;那我们就可以把数据写入LCD屏的设备文件。 1.显示颜色块 LCD屏分辨&#xff1a;800*480 像素 32位:说明一个像…

JAVA---学生管理系统

遍历字符串 ArrayList学习&#xff1a;

CCF 202009-3 点亮数字人生(拓扑排序)

题目背景 土豪大学的计算机系开了一门数字逻辑电路课&#xff0c;第一个实验叫做“点亮数字人生”&#xff0c;要用最基础的逻辑元件组装出实际可用的电路。时间已经是深夜了&#xff0c;尽管实验箱上密密麻麻的连线已经拆装了好几遍&#xff0c;小君同学却依旧没能让她的电路正…

【MySQL基础】MySQL基础操作三

文章目录 &#x1f349;1.联合查询&#x1f95d;笛卡尔积 &#x1f349;2.内连接&#x1f95d;查询单个数据&#x1f95d;查询多个数据 &#x1f349;3.外连接&#x1f349;4.自连接&#x1f349;5.合并查询 &#x1f349;1.联合查询 &#x1f95d;笛卡尔积 实际开发中往往数…

【软件测试】软件测试的基本概念和开发模型

1. 前言 在进行软件测试的学习之前,我们要了解软件测试一些基本概念. 这些基本概念将帮助我们更加明确工作的目标以及软件测试到底要做什么. 2. 软件测试的基本概念 软件测试的基本概念有3个,分别是需求,测试用例和BUG. 2.1 需求 这里的需求还可以分为 用户需求和软件需求,用…

python 第三方库(PyPinyin\shortuuid\json)

PyPinyin库 简介 PyPinyin库是一个支持中文转拼音输出的Python第三方库&#xff0c;它可以根据词组智能匹配最正确的拼音&#xff0c;并且支持多音字&#xff0c;简单的繁体, 注音&#xff0c;多种不同拼音/注音风格的转换。 安装 (framework-learn) C:\Users\zzg>pip …

python类对象

类提供了把数据和功能绑定在一起的方法。创建新类时创建了新的对象 类型&#xff0c;从而能够创建该类型的新 实例。实例具有能维持自身状态的属性&#xff0c;还具有能修改自身状态的方法&#xff08;由其所属的类来定义&#xff09;。 和其他编程语言相比&#xff0c;Python…

QT for Mcu的学习建议

QT for MCU&#xff08;微控制器单元&#xff09;是一个相对较新的领域&#xff0c;它允许在资源受限的微控制器上运行Qt框架&#xff0c;从而为嵌入式设备带来丰富的用户界面和跨平台的开发体验。以下是一些建议&#xff0c;可以帮助你开始学习Qt for MCU&#xff1a; 理解Qt…

从遍历上来说,list是单向的,vector是双向的。这句话对吗

从遍历的角度来说&#xff1a; 对于list来说&#xff0c;虽然它是双向链表&#xff0c;每个节点都包含指向前一个节点和后一个节点的指针&#xff0c;但在实际遍历时&#xff0c;我们通常只能沿着一个方向&#xff08;比如从头到尾或从尾到头&#xff09;进行遍历&#xff0c;因…

图像去噪--(1)

系列文章目录 文章目录 系列文章目录前言一、图像噪声1.1 噪声定义1.2 基本特征 二、按照噪声概率分布分类1.高斯噪声2.泊松噪声 三、去噪算法3.1 线性滤波3.1.1 高斯滤波3.1.2 均值滤波 3.2 非线性滤波3.2.1 中值滤波3.2.2 双边滤波 四、深度学习总结 前言 一、图像噪声 1.1 …

条款09:绝不在析构和构造中调用virtual函数

1.为什么 #include<iostream> using namespace std;class Transaction//交易信息类 {Transaction();virtual void logTransaction()const 0;//交易日志 };Transaction::Transaction() {logTransaction(); }class BuyTransaction : public Transaction//买入操作 {virtu…

Springboot全局异常处理

Springboot全局异常处理 一、不使用全局异常处理器二、全局异常处理器1.自定义常量&#xff08;返回状态码&#xff09;2.手动抛出异常3.编写全局异常处理器4.测试结果 三、全局异常处理方式二1.定义状态码常量2. 定义基础接口&#xff08;面向接口编程&#xff09;3.定义枚举类…