深入理解Java包装类与泛型的应用
今天我将带领大家进入Java包装类和泛型应用的学习。
我的个人主页
我的Java-数据结构专栏 :Java-数据结构,希望能帮助到大家。
一、Java包装类基础
二、Java泛型基础
三、Java包装类与泛型的结合
四、Java泛型进阶
五、Java包装类与泛型实战
一、Java包装类基础
在Java中,装箱(boxing)是指将基本数据类型(如int, char, double等)转换为对应的包装类对象(如Integer, Character, Double等)的过程。相反,拆箱(unboxing)是指将包装类对象转换回基本数据类型的过程。
从Java 5(JDK 1.5)开始,Java引入了自动装箱和拆箱机制,以简化基本数据类型和包装类之间的转换。这意味着在需要的时候,Java编译器会自动进行装箱和拆箱操作,而不需要程序员显式地调用转换方法。
- 包装类的定义与作用:包装类(Wrapper Classes)在Java编程语言中,指的是将基本数据类型(也称为原始数据类型,如int、char、double等)封装为对象的类。这些类使得基本数据类型可以作为对象进行处理,从而提供了更多的灵活性和功能。
-
Java中的包装类:在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基本类型,Java给每个基本类型都对应了 一个包装类型。
注意:除了 Integer 和 Character, 其余基本类型的包装类都是首字母大写。
自动装箱和拆箱示例代码
public class BoxingUnboxingExample {public static void main(String[] args) {// 自动装箱int primitiveInt = 10;Integer boxedInt = primitiveInt; // 编译器会自动调用 Integer.valueOf(int)// 自动拆箱int unboxedInt = boxedInt; // 编译器会自动调用 boxedInt.intValue()// 在算术运算中自动拆箱Integer anotherBoxedInt = 20;int result = boxedInt + anotherBoxedInt; // 实际上会拆箱为 int,然后执行加法运算,再装箱为 Integer(如果赋值给 Integer 变量)// 但由于 result 是 int 类型,所以这里只涉及拆箱,不涉及装箱// 显式装箱和拆箱(通常不需要这样做,因为自动装箱和拆箱已经足够)Integer explicitlyBoxedInt = Integer.valueOf(primitiveInt); // 显式装箱int explicitlyUnboxedInt = explicitlyBoxedInt.intValue(); // 显式拆箱// 打印结果以验证System.out.println("Primitive int: " + primitiveInt);System.out.println("Boxed int: " + boxedInt);System.out.println("Unboxed int: " + unboxedInt);System.out.println("Result of boxed int addition: " + result);System.out.println("Explicitly boxed int: " + explicitlyBoxedInt);System.out.println("Explicitly unboxed int: " + explicitlyUnboxedInt);}
}
-
性能考虑:虽然自动装箱和拆箱为程序员提供了便利,但在性能敏感的应用中,过多的装箱和拆箱操作可能会导致性能下降。因为装箱操作需要创建新的对象,而拆箱操作则涉及方法调用。
-
空指针异常:由于包装类对象是引用类型,因此它们可以是
null
。在进行拆箱操作时,如果包装类对象为null
,则会抛出NullPointerException
。例如,Integer nullInt = null; int value = nullInt;
这段代码会抛出空指针异常。 -
缓存机制:Java对某些包装类(如
Integer
、Boolean
、Byte
、Short
、Character
和Long
,但不适用于Float
和Double
)的值进行了缓存。对于Integer
来说,缓存范围是-128到127。在这个范围内的值被装箱时,会返回缓存中的对象,而不是创建新的对象。这有助于提高性能并减少内存使用。 -
比较操作:当比较两个包装类对象时,应该使用
equals()
方法而不是==
运算符,因为==
比较的是对象的引用而不是值。但是,对于缓存范围内的Integer
值,使用==
可能会得到正确的结果(因为它们是同一个对象的引用),但这是一种不可靠的做法,因为它依赖于Java的内部实现。 - 包装类的常用方法
- 转换方法(如valueOf, intValue等)
- 比较方法(如compareTo, equals等)
- 静态方法(如parseInt, parseDouble等)
二、Java泛型基础:
- 泛型的引入与意义
-
在Java 5之前,集合类(如ArrayList、HashMap等)只能存储Object类型的对象。这意 味着在存储和取出元素时,需要进行强制类型转换,这不仅繁琐,而且容易出现类型错误,如ClassCastException。为了解决这个问题,Java引入了泛型机制,允许在定义类、接口和方法时,使用类型参数来指代具体的类型,从而实现代码的通用性和类型安全性。
- 类型安全:
- 泛型可以在编译时期检查数据类型的合法性,避免出现类型不匹配导致的运行时错误。
- 编译器可以在编译期验证数据结构中的类型使用是否正确,降低运行时错误的概率。
- 代码复用:
- 泛型使得代码能够操作多种数据类型,而无需为每种类型单独实现一个版本。
- 一个泛型数据结构可适配多种类型,提高了代码的复用性。
- 代码清晰与简洁:
- 使用泛型可以使代码更加清晰、易懂,降低了代码阅读的难度。
- 避免了不必要的类型转换,减少了代码的冗余,提高了代码的可读性。
- 性能提升:
- 由于泛型避免了不必要的类型转换,所以在一定程度上可以提高程序的性能。
- 增强程序的健壮性:
- 通过在编译时期进行类型检查,泛型可以帮助开发者更早地发现并修复类型相关的错误,从而增强程序的健壮性。
- 泛型类:
- 在定义类时使用泛型参数,可以将具体的数据类型作为参数传递给类,并在类内部使用这些数据类型。
- 泛型方法:
- 在方法的返回值前使用泛型参数,可以将具体的数据类型作为参数传递给方法,并在方法内部使用这些数据类型。
- 泛型接口:
- 在定义接口时使用泛型参数,可以将具体的数据类型作为参数传递给接口,并在实现接口的类中使用这些数据类型。
-
Java泛型的引入极大地增强了代码的类型安全性和可读性,提高了代码的复用性和维护性。无论是标准库中的集合类,还是自定义的数据结构,都可以通过泛型实现更灵活、更高效的代码设计。在数据结构中,泛型为开发者提供了统一性和扩展性,同时也为程序的安全性和健壮性保驾护航。
-
泛型类是指在定义类时使用类型参数(也称为类型占位符)的类。类型参数在类名后面的尖括号<>
中指定。
// 定义一个泛型类 Box
public class Box<T> {// T 是类型参数,表示任意类型private T content;public void setContent(T content) {this.content = content;}public T getContent() {return content;}
}
使用泛型类时,可以指定具体的类型参数:
Box<Integer> integerBox = new Box<>();
integerBox.setContent(100);
Integer content = integerBox.getContent();
泛型接口与泛型类的定义类似,只是在接口名后使用尖括号指定类型参数。
// 定义一个泛型接口 Pair
public interface Pair<K, V> {K getKey();V getValue();
}
实现泛型接口时,需要指定具体的类型参数:
public class OrderedPair<K, V> implements Pair<K, V> {private K key;private V value;public OrderedPair(K key, V value) {this.key = key;this.value = value;}@Overridepublic K getKey() {return key;}@Overridepublic V getValue() {return value;}
}
泛型方法是指在方法定义时使用类型参数的方法。类型参数在方法返回类型前和方法名后的尖括号中指定。
// 定义一个泛型方法 printArray
public static <T> void printArray(T[] array) {for (T element : array) {System.out.print(element + " ");}System.out.println();
}
使用泛型方法时,无需指定类型参数,因为编译器会根据方法调用时的实际参数类型进行推断:
Integer[] intArray = {1, 2, 3, 4, 5};
printArray(intArray); // 输出: 1 2 3 4 5
Java集合框架中的许多类都是泛型的,如ArrayList
、HashMap
等。使用泛型集合可以避免类型转换和潜在的ClassCastException
。
ArrayList<String> stringList = new ArrayList<>();
stringList.add("Hello");
stringList.add("World");for (String s : stringList) {System.out.println(s);
}
泛型通配符?
用于表示未知的类型。它主要有两种形式:无界通配符(?
)、上界通配符(? extends SomeType
)和下界通配符(? super SomeType
)。
// 使用无界通配符
List<?> unknownList = new ArrayList<String>();// 使用上界通配符
List<? extends Number> numberList = new ArrayList<Integer>();
// numberList 可以是 Integer、Double、Float 等 Number 子类的列表,但不能添加除 null 以外的元素// 使用下界通配符
List<? super Integer> integerSuperList = new ArrayList<Number>();
// integerSuperList 可以是 Number 或 Number 的父类(如 Object)的列表,可以添加 Integer 或 Integer 的子类对象
三、Java包装类与泛型的结合
包装类与泛型的结合:
当包装类与泛型结合使用时,可以创建更加灵活和类型安全的集合和数据结构。例如,ArrayList<Integer>
是一个使用Integer
包装类的泛型集合,它可以存储整数值,并且提供了类型安全的保证。
import java.util.ArrayList;
import java.util.List;public class WrapperGenericsExample {public static void main(String[] args) {// 创建一个存储Integer对象的ArrayListList<Integer> integerList = new ArrayList<>();// 向列表中添加整数(自动装箱)integerList.add(10);integerList.add(20);integerList.add(30);// 遍历列表并打印每个元素(自动拆箱)for (Integer integer : integerList) {System.out.println(integer);}// 使用包装类的方法int sum = 0;for (Integer integer : integerList) {sum += integer.intValue(); // 使用intValue()方法将Integer转换为int}System.out.println("Sum: " + sum);}
}
ArrayList<Integer>
是一个泛型集合,它使用Integer
包装类来存储整数。由于使用了泛型,我们得到了类型安全的保证:我们不能向integerList
中添加除Integer
对象以外的任何对象(除了null
,但在Java 5及更高版本中,泛型集合通常不允许存储null
以避免潜在的NullPointerException
)。
四、Java泛型进阶:
泛型擦除示例:
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;// 定义一个简单的泛型类
public class Box<T> {private T content;public void setContent(T content) {this.content = content;}public T getContent() {return content;}// 一个用于反射获取泛型类型信息的方法(注意:这个方法在泛型擦除后无法直接获取到T的具体类型)public Type getGenericType() {return ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];}public static void main(String[] args) {Box<String> stringBox = new Box<>();stringBox.setContent("Hello, World!");System.out.println(stringBox.getContent());// 通过反射尝试获取泛型类型信息(实际上在运行时已经擦除)Type genericType = stringBox.getGenericType();System.out.println("Generic type (at runtime, may be erased): " + genericType);// 但我们可以通过子类化并立即获取泛型信息来“绕过”擦除(这种方法不适用于所有情况)class StringBox extends Box<String> {}Type stringBoxType = StringBox.class.getGenericSuperclass().getActualTypeArguments()[0];System.out.println("Generic type of StringBox (inferred at compile time): " + stringBoxType);// 注意到,直接使用Box<String>的实例在运行时无法获取到T的具体类型,因为泛型信息已被擦除}
}
Java的类型推断机制允许编译器根据上下文自动推断出变量的类型,从而简化了代码的编写。以下是一个使用类型推断的示例:
import java.util.ArrayList;
import java.util.List;public class TypeInferenceExample {public static void main(String[] args) {// 在Java 7及更高版本中,可以在右侧的构造函数调用中省略泛型类型参数List<String> list1 = new ArrayList<>(); // 类型推断为List<String>// 在Java 10及更高版本中,可以使用var关键字进一步简化变量声明var list2 = new ArrayList<String>(); // 类型推断为ArrayList<String>(但var的使用应谨慎,以避免降低代码可读性)// 方法调用中的类型推断printList(list1); // 编译器可以推断出list1的类型为List<String>// 泛型方法调用中的类型推断List<Integer> numbers = createListWithNumbers(1, 2, 3, 4, 5); // 编译器可以推断出返回类型为List<Integer>}// 一个简单的泛型方法,用于创建并返回一个包含指定元素的列表public static <T> List<T> createListWithElements(T... elements) {List<T> list = new ArrayList<>();for (T element : elements) {list.add(element);}return list;}// 一个用于打印列表内容的方法(注意:这里不是泛型方法,只是接受泛型类型的参数)public static void printList(List<?> list) {for (Object element : list) {System.out.println(element);}}// 一个具体的泛型方法调用示例,用于创建并返回一个包含数字的列表public static List<Integer> createListWithNumbers(Integer... numbers) {return createListWithElements(numbers); // 这里再次调用了泛型方法createListWithElements,并进行了类型推断}
}
五、Java包装类与泛型实战
在实际开发中,包装类与泛型经常一起使用。例如,当需要将基本数据类型存储在集合中时,由于集合的泛型参数必须是对象类型,因此需要使用包装类。
import java.util.ArrayList;
import java.util.List;public class WrapperAndGenericsExample {public static void main(String[] args) {// 创建一个存储Integer对象的列表List<Integer> integerList = new ArrayList<>();integerList.add(10);integerList.add(20);integerList.add(30);// 遍历列表并打印元素for (Integer integer : integerList) {System.out.println(integer);}// 创建一个存储Double对象的列表List<Double> doubleList = new ArrayList<>();doubleList.add(1.1);doubleList.add(2.2);doubleList.add(3.3);// 使用泛型方法来打印Double列表printList(doubleList);}// 泛型方法,用于打印列表中的元素public static <T> void printList(List<T> list) {for (T element : list) {System.out.println(element);}}
}
相关文章:
深入理解Java包装类与泛型的应用
今天我将带领大家进入Java包装类和泛型应用的学习。 我的个人主页 我的Java-数据结构专栏 :Java-数据结构,希望能帮助到大家。 一、Java包装类基础 二、Java泛型基础 三、Java包装类与泛型的结合 四、Java泛型进阶 五、Java包装类与泛型实战 一、Ja…...
【机器学习chp4】特征工程
推荐文章1,其中详细分析了为什么L1正则化可以实现特征选择(特征剔除) 【王木头 L1、L2正则化】三个角度理解L1、L2正则化的本质-CSDN博客 推荐文章2,里面详细分析了奇异值分解 【线性代数】矩阵变换-CSDN博客 本文遗留问题&#…...
LeetCode螺旋矩阵
快一个月没刷题了,最近工作有些忙,今天闲下来两小时,刷一道 题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1: 输入:matrix [[1,2,3],[4…...
第十五届蓝桥杯JAVA的B组题目详情解析
(第一个填空太简单,就不写了,根本不用代码,直接excel计算) 目录 蓝桥杯第二个填空,类斐波那契循环数 蓝桥杯JAVA.b组第三题 -分布式队列(模拟) 食堂(蓝桥杯D题) 编辑 星际旅行(Floyd佛洛依德) 其余的有点变态,感觉学了好像…...
在几分钟内将数据从 Oracle 迁移到 ClickHouse
ClickHouse 是一个开源的面向列的数据库管理系统。它在实时数据处理方面的出色性能显着增强了数据分析和业务洞察力。将数据从 Oracle 迁移到 ClickHouse 可以释放数据在决策中的力量,这是单独使用 Oracle 无法实现的。 本教程介绍如何使用 BladePipe 将数据从 Orac…...
ASP.NET MVC宠物商城系统
该系统采用B/S架构,使用C#编程语言进行开发,以ASP.NET MVC框架为基础,以Visual Studio 2019为开发工具,数据库采用SQL Server进行保存数据。系统主要功能包括登录注册、宠物展示、个人中心、我的订单、购物车、用户管理、宠物类别…...
完整http服务器
目录 背景目标描述技术特点开发环境WWW客户端浏览发展史服务端http发展史http分层概览 背景 http协议被广泛使用,从移动端,pc浏览器,http无疑是打开互联网应用窗口的重要协议,http在网络应用层中的地位不可撼动,是能…...
【专题】2024AIGC创新应用洞察报告汇总PDF洞察(附原数据表)
原文链接:https://tecdat.cn/?p38310 在科技日新月异的今天,人工智能领域正以前所未有的速度发展,AIGC(人工智能生成内容)成为其中最耀眼的明珠。从其应用场景的不断拓展,到对各行业的深刻变革࿰…...
形态学图像处理(Morphological Image Processing)
形态学图像处理(Morphological Image Processing) 前言 本博客为个人总结数字图像处理一课所写,并给出适当的扩展和相应的demo。 写博客跟做 checkpoint 很像,毕竟个人还不能达到那种信手拈来的境界,忘了就是从零开始训练࿰…...
【IDER、PyCharm】免费AI编程工具完整教程:ChatGPT Free - Support Key call AI GPT-o1 Claude3.5
文章目录 CodeMoss 简介CodeMoss 的模型集成如何安装和配置 CodeMossIDER 插件安装步骤 CodeMoss 的实战使用AI 问答功能代码优化与解释优化这段代码解释这段代码 文件上传与对话联网查询与 GPT 助手联网查询GPT 助手 提升开发效率的最佳实践结语更多文献 CodeMoss 简介 CodeM…...
C++11的一些实用特性
1.统一的列表初始化 在C98中,标准允许使用花括号{}对数组或者结构体元素进行统一的列表初始值设定。 //统一的列表初始化 struct Date {int year;int month;int day; };void test1() {Date d1 { 2024,11,14 };int array1[] { 1, 2, 3, 4, 5 };int array2[5] { …...
23种设计模式-观察者(Observer)设计模式
文章目录 一.什么是观察者模式?二.观察者模式的结构三.观察者模式的应用场景四.观察者模式的优缺点五.观察者模式的实现(C示例)六.观察者模式的实现(JAVA示例)七.代码解释八.总结 类图: 观察者设计模式类图…...
【CUDA】Branch Divergence and Unrolling Loop
目录 一、避免分支发散 1.1 并行规约问题 1.2 并行规约中的发散 二、UNrolling Loops 一、避免分支发散 控制流有时依赖于 thread 索引。同一个warp中,一个条件分支可能导致性能很差。通过重新组织数据获取模式可以减少或避免 warp divergence。具体问题查看下…...
深度学习:卷积神经网络的计算复杂度,顺序操作,最大路径长度
卷积层的计算复杂度 在深度学习中,卷积层的计算复杂度主要取决于卷积核的大小、输入和输出的通道数量、以及输入序列的长度。具体来说,卷积层的计算复杂度可以通过以下几个因素来计算: 卷积核大小 k:卷积核的大小决定了每次卷积操…...
springboot 配置文件中 multipart.max-file-size 各个版本的写法
由于springboot具有几个版本,不同版本对于文件上传最大限制的配置也有所不同。 所以要注意springboot本身的版本,不然会一直报错 在springboot1.3版本中: multipart.maxFileSize在springboot1.4与springboot1.5版本中: spring…...
linux 中mysql查看慢日志
1、到mysql容器,先登录到数据库,查看是否开启 mysql -h 127.0.0.1 -uroot -p SHOW VARIABLES LIKE slow_query_log; 2、如果没有开启,需要先开启 set global slow_query_log ON; 3、查看慢日志文件 SHOW VARIABLES LIKE slow_query_log…...
单片机的基本组成与工作原理
单片机(Microcontroller Unit, MCU)是一种将计算机的主要部分集成在一个芯片上的小型计算机系统。它通常包括中央处理器(CPU)、存储器(Memory)、输入输出接口(I/O Ports)、定时器/计…...
智慧隧道和智慧交通
通过引入先进的物联网技术,将各种硬件设备如传感器、摄像头、控制系统等有效地连接并管理起来,以实现道路安全和交通流畅的目标。这些设备将能够实时监控和控制隧道内的各种设备和系统,从而提高道路安全、提升驾驶体验并降低管理成本。 在这个…...
List、Set、Map详解和区别
在 Java 中,List、Set、Map是常用的集合类型,它们各自具有不同的特点和用途,以下是对它们的详细介绍及区别分析: List(列表) 特点: 有序性:List中的元素是有序的,即元素…...
界面控件DevExpress WinForms v24.2新功能预览 - 支持.NET 9
DevExpress WinForms 拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜…...
Postman之pm.test断言操作
Postman之pm.test断言操作 1.断言方法2.连接符3.条件判断符 用于验证请求的响应数据是否符合预期 1.断言方法 pm.test():定义一个测试函数,接受两个参数,一个字符串参数用来描述该测试,一个返回True/False的函数 语法格式&#…...
对数几率回归
对数几率回归简介 对数几率回归(Logistic Regression)是一种用于解决分类问题的经典统计模型,其核心思想是利用逻辑函数(Sigmoid函数)将线性回归模型的输出值映射到概率范围 [0, 1],从而实现分类预测。对数…...
docker 配置同宿主机共同网段的IP 同时通过通网段的另一个电脑实现远程连接docker
docker配置网络 #宿主机执行命令 ifconfig 查询对应的主机ip 子网掩码 网关地址 #[网卡名称]:inet[主机IP] netmask[子网掩码] broadcast[网关地址]这里需要重点关注:eno1[网卡名称]以及【192.168.31.225】网关地址 在宿主机执行docker命令创建一个虚拟…...
4-7-1.C# 数据容器 - LinkedList(LinkedList 的定义、LinkedList 结点的遍历、LinkedList 的常用方法)
LinkedList 概述 LinkedList<T> 通过节点(Node)来存储数据,每个节点包含数据和指向下一个节点的引用 LinkedList<T> 存储的元素是可重复的 LinkedList<T> 支持泛型,可以指定存储的元素的类型 LinkedList<…...
「三」体验HarmonyOS端云一体化开发模板——使用DevEco Studio直接创建端云一体化工程
关于作者 白晓明 宁夏图尔科技有限公司董事长兼CEO、坚果派联合创始人 华为HDE、润和软件HiHope社区专家、鸿蒙KOL、仓颉KOL 华为开发者学堂/51CTO学堂/CSDN学堂认证讲师 开放原子开源基金会2023开源贡献之星 「目录」 「一」HarmonyOS端云一体化概要 「二」体验HarmonyOS端云一…...
确保以管理员权限运行 Visual Studio 开发者命令提示符
文章目录 解决方法:1. 以管理员身份运行命令提示符2. 改变目录权限3. 改变项目目录位置4. 检查文件系统权限 总结: ********************************************************************** ** Visual Studio 2022 Developer Command Prompt v17.12.0 …...
命令执行简单(棱角社区有毒)
前言:小迪安全2022第一节反弹shell,小迪用的是两台都是云服务器,没有服务器可以在自己的主机上搭建也是可以的,主机上搭两个网站 思路:生成一个木马文件,下载到本机,然后利用本机上传到目标主机…...
Keil基于ARM Compiler 5的工程迁移为ARM Compiler 6的工程
环境: keil版本为5.38,版本务必高于5.30 STM32F4的pack包版本要高于2.9 软件包下载地址:https://zhuanlan.zhihu.com/p/262507061 一、更改Keil中编译器 更改后编译,会报很多错,先不管。 二、更改头文件依赖 观察…...
Kafka-创建topic源码
一、命令创建topic kafka-topics --create --topic quickstart-events --bootstrap-server cdh1:9092 --partitions 2 --replication-factor 2 二、kafka-topics脚本 exec $(dirname $0)/kafka-run-class.sh org.apache.kafka.tools.TopicCommand "$" 脚本中指定了…...
【网络安全】(一) 0成本添加访问级监控
互联网的安全感这个概念源于阿里。顾名思义,让互联网的用户对于web产品能够产生足够的信任和依赖。特别是涉及到用户资金交易的站点,一次严重的用户资料泄露就可以彻底毁掉你的品牌。 然而当前阶段除了bat大部分互联网行业的企业对于网络安全给的重视都…...
网站制作一条龙全包/每日英语新闻
1、配置git 2、create git repository 3、git-->add commit Directory 4、提交代码 git remote add origin https://github.com/lujianing/ueditor.git git push -u origin master 注意:如果报错-->先fetch再merge-->push...
wordpress添加附近商家/seo去哪里学
mysql的最大连接数默认是100, 这个数值对于并发连接很多的数据库应用是远远不够的,当连接请求大于默认连接数后,就会出现无法连接数据库的错误,因此我们需要把它适当调大一些,有两种办法可以修改最大连接数,一种是修改…...
公司网站没做301怎么做301/seo公司北京
必要知识点: 32位系统函数调用使用堆栈传参 其调用时栈的结构如下: 返回地址 -> 参数n -> 参数n-1 -> … -> 参数1 将elf文件扔到IDA中 跟进到vulnerable函数,里面有输入函数,可以用来做栈溢出 再看到有system函数 又…...
常德网站建设网站优化/朝阳网站seo
添加链接描述 欧拉路径 有向图 : 回路: 所有入度等于出度 路径:最多两个点入读不等于出度。起点的出度大于1,终点的入度大于1 无向图: 回路:奇点个数不存在 路径:处了两个点为奇数,其…...
北京网站建设怎么样/南昌seo全网营销
2020年注定是不平凡的一年,疫情让整个半导体经历了颇有磨难的半年,但半导体厂商们还是在艰难中寻求突击的机会。在汽车行业,国产汽车智能芯片的自主研发之路亦在滚滚向前,上半年汽车芯片行业发生了两件大事:一是北汽产…...
wordpress5.0.2编辑器/seo优化顾问服务
最近遇到一个问题:在使用ehcache时,通过CacheManager.getCache(chachename).get(key),获取相应的缓存内对象(当时这个对象是个list), 有个同事写个方法使用 removeall 来删除list中不需要的对象,…...