首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java 编程技巧之数据结构

使用HashSet判断主键是否存在 ---- HashSet 实现 Set 接口,由哈希表(实际上是 HashMap )实现,但不保证 set 的迭代顺序,并允许使用 null 元素。...如果定位到的数组位置不含链表,那么查找、添加等操作很快,仅一次寻址即可,其时间复杂度 O(1) ;如果定位到的数组包含链表,对于添加操作,其时间复杂度 O(n) ——首先遍历链表,存在即覆盖,不存在则新增...GenericHolder(T value) { this.value = value; } } 接口 定义的数据提供者接口: /** 数据提供者接口 */ public...代替具体的类型实参,可以把"?"看成所有类型的父类。具体类型不确定的时候,可以使用通配符 "?";不需要使用类型的具体功能,只使用Object类中的功能,可以使用通配符 "?"。...上下界的声明,必须与的声明放在一起 。 上界通配符(extends): 上界通配符 ”extends ”,可以接受其指定类型或其子类作为参。

1.8K10

Java 编程技巧之数据结构

使用HashSet判断主键是否存在 ---- HashSet 实现 Set 接口,由哈希表(实际上是 HashMap )实现,但不保证 set 的迭代顺序,并允许使用 null 元素。...如果定位到的数组位置不含链表,那么查找、添加等操作很快,仅一次寻址即可,其时间复杂度 O(1) ;如果定位到的数组包含链表,对于添加操作,其时间复杂度 O(n) ——首先遍历链表,存在即覆盖,不存在则新增...GenericHolder(T value) { this.value = value; } } 接口 定义的数据提供者接口: /** 数据提供者接口 */ public...代替具体的类型实参,可以把"?"看成所有类型的父类。具体类型不确定的时候,可以使用通配符 "?";不需要使用类型的具体功能,只使用Object类中的功能,可以使用通配符 "?"。...上下界的声明,必须与的声明放在一起 。 上界通配符(extends): 上界通配符 ”extends ”,可以接受其指定类型或其子类作为参。

1.2K10
您找到你想要的搜索结果了吗?
是的
没有找到

Java基础八股文(背诵版)

详细的先后顺序:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。...Java 语言通过实现多个接口间接支持多重继承,接口由于只包含方法定义,不能有方法的实现,类 C 继承接口 A 与接口 B 即使它们都有方法f(),也不能直接调用方法,实现具体的f()方法才能调用,...垃圾回收器准备好释放对象占用空间,首先会调用 finalize()方法,并在下一次垃圾回收动作发生真正回收对象占用的内存。 简述 ,即“参数化类型”,解决不确定对象具体类型的问题。...在使用过程中,操作的数据类型被指定为一个参数,这种参数类型在类中称为类、接口中称为接口和方法中称为方法。...简述擦除 Java 编译器生成的字节码是不包涵信息的,类型信息将在编译处理是被擦除,这个过程被称为擦除。 简述注解 Java 注解用于 Java 代码提供元数据。

43.7K2738

Java基础-甲骨文系列

详细的先后顺序:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。...Java语言通过实现多个接口间接支持多重继承,接口由于只包含方法定义,不能有方法的实现,类C继承接口A与接口B即使它们都有方法f(),也不能直接调用方法,实现具体的f()方法才能调用,不会产生二义性...简述 ,即“参数化类型”,解决不确定对象具体类型的问题。在编译阶段有效。...在使用过程中,操作的数据类型被指定为一个参数,这种参数类型在类中称为类、接口中称为接口和方法中称为方法。...简述擦除 Java编译器生成的字节码是不包涵信息的,类型信息将在编译处理被擦除,这个过程被称为擦除。

81810

.NET面试题系列 - IEnumerable的派生类

Queue内部建立了一个存放T对象的环形数组,并通过head和tail变量来指向该数组的头和尾。 ? 默认情况下,Queue的初始化容量是32,也可以通过构造函数指定容量。...默认情况下,增长因子(growth factor)的值 2.0,所以内部数组的长度会增加一倍。也可以通过构造函数中指定增长因子。Queue的容量也可以通过TrimExcess方法来减少。... .NET 引入支持后,类型安全的 Dictionary 类出现。...部分集合继承此接口 提供索引器 List 索引器 IList 继承了Ilist(以及其他接口) ArrayList的版本 最常用的集合 如果不需要很强的功能,可以考虑用...IEnumerator接口拥有一个Current属性,我们需要实现它的get方法,返回当前的iterator。 我们需要为IEnumerator类型增加一个int类型的值,记录当前位置。

1.7K20

一文搞定知识

转载请联系 494324190@qq.com 是程序设计语言的一种风格,允许程序员在强类型程序设计语言中编写代码使用一些以后才指定的类型,在实例化时作为参数指明这些类型。...1.构造函数 我们在开发中经常用到构造函数,在类和结构中同样也适用构造函数。...1..接口约束 规定某个数据类型必须是向某个接口,需要声明一个 接口类型约束 ,利用这种约束可以避免需要通过转型才能调用一个显示接口成员的实现。下面我们通过一个代码段来讲解一下接口约束。...那么当我们向 Demo 传递 StringBuilder 作为类型参数来创建 Demo 变量编译器会报告一个错误,这是因为 StringBuilder 没有实现 IComparable 接口。...有时我们需要在类中创建类型实参的实例,这时我们可以规定传入类的类型实参必须具有构造函数,如果要实现这一点我们可以使用 new() 来作为限制,这个约束叫做 构造函数约束 。

96010

Java 后台开发面试题分享一

调用 String 类的构造函数,即用 new String() 创建,它会在运行期创建一个对象存在堆内存中,然后其堆内存的值指向字符串常量池的一个字符串对象。...抽象类中可以有变量和常量;接口中只能有静态常量。 抽象类中可以有构造方法,而接口不可以有构造方法。...抽象类中增加方法子类可以不用重写;Java 8 之前,接口增加方法实现类需要重写,jdk1.8 开始接口使用默认方法让实现类选择是否重写。...两个都是 List 集合,但是一个,另一个 Object ;存放元素,前者限定了其集合元素类型 T,后者的集合的元素可以是任意类型;发生强制类型转换,前者可以在编译期发现类型转换错误,后者会在运行期间报错...Java 中的,只在编译阶段有效。在编译之后程序会采取去化的措施。在编译过程中,正确检验结果后,会将的相关信息擦除,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。

66910

TS 从 0 到 1 - 进阶

T 代表 Type,在定义通常用作第一个类型变量名称,它可以用任何有效名称代替。...# 使用时机 函数接口或类将处理多种数据类型(为了通用) 函数接口或类在多个地方使用该数据类型(为了一致) # 约束 约束用于限制每个类型变量接受的类型数量。...# 确保属性存在 有时,希望类型变量对应的类型上存在某些属性,除非显式地将特定属性定义类型变量,否自编译器不会知道这些属性是否存在。...# 参数默认类型 可以为中的类型参数指定默认类型使用没有在代码中直接指定参数类型参数,从实际值参数中无法推断出类型,这个默认类型就会起作用。...指定类型实参,只需要指定必选类型参数的类型实参,未指定的类型参数会被解析默认类型 一个被现有类或接口合并的类或者接口的声明可以为现有类型参数引入默认类型 一个被现有类或接口合并的类或者接口的声明可以引入新的类型参数

69020

Typescript基础语法

其中,any代表任意类型,比较特殊有,void空返回值,只能赋值undefined或者null,never类型代表永远没有返回值的类型,比如抛出异常的函数,死循环的函数。...,同时,可以为类设定constructor——构造函数,constructor的形参可以添加public修饰符,代表同时该形参同时表示一个public的类成员。...类通过implements关键字,指定要实现接口,需要类中具备满足接口定义的成员 创建类对象使用new 调用构造函数 interface Man{ fullName: string;...namespace B{ interface b{} } typescript支持类似java的语法,比如类与接口上的、方法上的 interface GenericIdentityFn...: T; } 联合类型 typescript还支持创建一个可以指代多种类型类型,通过|运算符,即可使用不同类型创建一个联合类型,代表当前变量其中之一,如 let a : string | number

1.5K20

BATJ面试必会之常见Java基础面试题(附答案)

)生成的变量比较,结果false。...7,一个类可以实现多个接口,但只能继承一个抽象类。 Java抽象类可以有构造函数吗? 可以有,抽象类可以声明并定义构造函数。...因为你不可以创建抽象类的实例,所以构造函数只能通过构造函数链调用(Java中构造函数链指的是从其他构造函数调用一个构造函数),例如,当你创建具体的实现类。...另外,即使你没有提供任何构造函数,编译器将为抽象类添加默认的无参数的构造函数,没有的话你的子类将无法编译,因为在任何构造函数中的第一条语句隐式调用super(),Java中默认超类的构造函数。...这是一道更好的面试题。是通过类型擦除来实现的,编译器在编译擦除了所有类型相关的信息,所以在运行时不存在任何类型相关的信息。例如List 在运行时仅用一个List来表示。

85820

你知道JDK1.7和1.8的区别吗?

JDK1.7 1.1二进制变量的表示,支持将整数类型用二进制来表示,用0b开头。 1.2 Switch语句支持String类型。...1.4 Catch多个异常 1.5 数字类型的下划线表示 更友好的表示方式,不过要注意下划线添加的一些标准 1.6 实例的创建可以通过类型推断来简化 可以去掉后面new部分的类型,只用就可以了...的增强版,新增了以下特性 1、default关键字,在接口中可以通过使用default关键字编写方法体,实现类可以不用实现该方法,可以进行直接调用 2、Lambda 表达式,函数式编程,函数式编程就是一种抽象程度很高的编程范式...,纯粹的函数式编程语言编写的函数没有变量 3、函数接口,“函数接口”是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。...4、方法与构造函数引用,jdk1.8提供了另外一种调用方式::, 要使用 方 法 引用时 , 目 标引用 放 在 分隔符::前 ,方法 的 名 称放在 后 面 5、局部变量限制 6、Date

5.4K20

Java Review(三十一、

,就是允许在定义类、接口、方法使用类型形参,这个类型形参(或叫)将在声明变量、创建对象、调用方法动态地指定(即传入实际的类型参数,也可称为类型实参 ) 。...使用一个 (包括声明变量和创建对象两种情况) , 都应该为这个类传入一个类型实参。...在一种更极端的情况下,程序需要为形参设定多个上限 (至多有一个父类上限,可以有多个接口上限),表明该形参必须是其父类的子类(是父类本身也行),并且实现多个上限接口。...一旦定义了构造器,接下来在调用构造,就不仅可以让 Java 根据数据参数的类型来"推断"形参的类型,而且程序员也可以显式地构造器中的形参指定实际的类型 。...把一个具有信息的对象赋给另 一个没有信息的变量,所有在尖括号之间的类型信息都将被扔掉 。

71830

C#高级语法之约束,类型安全、逆变和协变(思想原理)

这样我们的问题就解决了,调用者传入什么类型,我们就构造什么类型的集合来存放动物。...然后我们来AnimalHouse添加约束:必须包含公共无参构造函数和基类必须是Animal //Animal约束T必须是Animal的子类或者本身,new()约束放在最后 public class...提示必须是公共无参的非抽象类型构造函数。...我们就随便在当前方法中添加一个操作:dog变量添加一个Dog对象,TestIn方法改为如下: //需要一个IAnimalHouse类型的参数 public static void TestIn...所以逆变作为参数传递类型是安全的。 思考:那么,现在你能明白上面那个错误,为什么“协变无法作为参数、逆变无法作为返回值”了吗?

6.6K30

有点长的 Java API 设计清单

建议接口实现类和继承关系的类应该在行为上保持一致性 ▲2.1.8. 建议用抽象类而不是接口解耦Api的实现 ▲2.1.9. 建议使用枚举而不是常量 ▲2.1.10. 考虑使用 ▲2.1.11....考虑在参数上增加约束 ▲2.1.12. 考虑使用接口实现多继承的效果 ▲2.1.13. 避免使用者的扩展(需求)进行设计 ▲2.1.14. 避免深度的继承层次 ▲2.1.15....建议一系列重载的方法设计一个的方法 ▲3.1.9. 考虑使用方法 ▲3.1.10. 考虑设计方法对,即两个方法的作用是相反的 ▲3.1.11. 避免“helper”方法 ▲3.1.12....提供了多个构造方法,遵循指南对其进行重载 ▲3.6.7. 建议使用构造方法而不是静态的工厂方法 ▲3.6.8. 考虑使用无参的构造方法 ▲3.6.9....需要回避直接实例化类的时候使用考虑private的构造函数 ▲3.6.14. 避免创建非必需的对象 ▲3.6.15. 避免finalizer ▲3.6.16.

50710

有点长的 Java API 设计清单

建议接口实现类和继承关系的类应该在行为上保持一致性 ▲2.1.8. 建议用抽象类而不是接口解耦Api的实现 ▲2.1.9. 建议使用枚举而不是常量 ▲2.1.10. 考虑使用 ▲2.1.11....考虑在参数上增加约束 ▲2.1.12. 考虑使用接口实现多继承的效果 ▲2.1.13. 避免使用者的扩展(需求)进行设计 ▲2.1.14. 避免深度的继承层次 ▲2.1.15....建议一系列重载的方法设计一个的方法 ▲3.1.9. 考虑使用方法 ▲3.1.10. 考虑设计方法对,即两个方法的作用是相反的 ▲3.1.11. 避免“helper”方法 ▲3.1.12....提供了多个构造方法,遵循指南对其进行重载 ▲3.6.7. 建议使用构造方法而不是静态的工厂方法 ▲3.6.8. 考虑使用无参的构造方法 ▲3.6.9....需要回避直接实例化类的时候使用考虑private的构造函数 ▲3.6.14. 避免创建非必需的对象 ▲3.6.15. 避免finalizer ▲3.6.16.

80030

有点长的 Java API 设计清单

建议接口实现类和继承关系的类应该在行为上保持一致性 ▲2.1.8. 建议用抽象类而不是接口解耦Api的实现 ▲2.1.9. 建议使用枚举而不是常量 ▲2.1.10. 考虑使用 ▲2.1.11....考虑在参数上增加约束 ▲2.1.12. 考虑使用接口实现多继承的效果 ▲2.1.13. 避免使用者的扩展(需求)进行设计 ▲2.1.14. 避免深度的继承层次 ▲2.1.15....建议一系列重载的方法设计一个的方法 ▲3.1.9. 考虑使用方法 ▲3.1.10. 考虑设计方法对,即两个方法的作用是相反的 ▲3.1.11. 避免“helper”方法 ▲3.1.12....提供了多个构造方法,遵循指南对其进行重载 ▲3.6.7. 建议使用构造方法而不是静态的工厂方法 ▲3.6.8. 考虑使用无参的构造方法 ▲3.6.9....需要回避直接实例化类的时候使用考虑private的构造函数 ▲3.6.14. 避免创建非必需的对象 ▲3.6.15. 避免finalizer ▲3.6.16.

64740

关于Java中、反射和注解的扫盲篇

通用化的手段在于让数据类型变得参数化,定义,对应的数据类型是不确定的,方法被调用时,会指定具体类型,其核心目标是为了解决容器类型在编译安全检查的问题。   ...:一般用在类、方法、接口中,叫做类、接口方法 的使用 package demo.generic; import lombok.Data; /** * 类的定义...private T member; //类的构造方法形参member的类型T,T的类型由外部指定 public GenericClassExample(T member...每个类都有唯一一个与之相应的Class对象 Class类类型,而Class对象类型对象 Class类的特点 Class类也是类的一种,class则是关键字 Class类只有一个私有的构造函数...在我们上面自定义的ReflectTarget类中创建各种类型构造函数,用于测试 // --------构造函数-------- // 访问修饰符默认的构造函数,即同包可访问得 ReflectTarget

10710

Java 中文官方教程 2022 版(六)

,就可以用空类型参数集()替换调用构造函数所需的类型参数。...()替换调用构造函数所需的类型参数。...> myMap = new HashMap(); // unchecked conversion warning 和非类的构造函数类型推断 请注意,构造函数可以是的(换句话说...请注意,这个类的构造函数包含一个形式类型参数T。编译器这个类的构造函数的形式类型参数T推断了类型String(因为这个构造函数的实际参数是一个String对象)。...桥接方法 编译一个继承参数化类或实现参数化接口的类或接口,编译器可能需要创建一个合成方法,称为桥接方法,作为类型擦除过程的一部分。

11500

Effective-java-读书笔记之方法

.所以子类方法与基类签名相同, 则覆盖基类, 尽管对象声明为基类, 但是调用时用的是子类的实现.但重载的选择工作是在编译进行的, 完全基于参数的编译类型..... -> 重载方法中, 不要在同样的参数位置接受不同的函数接口.第53条 慎用可变参数可变参数机制通过先创建一个数组, 数组的大小在调用位置所传递的参数数量, 然后将参数传到数组中, 最后将数组传递给方法....在重视性能的情况下, 使用可变参数机制要特别小心.在定义参数数目不定的方法, 可变参数是一种很方便的方式, 但是它们不应该被过度滥用.第54条 返回零长度的数组或集合, 而不是null返回类型数组或集合的方法...构造函数, 方法和字段声明之前加上doc注释.方法的文档注释应该简洁地描述出它和客户端之间的约定....偶尔你需要用{@index}加入额外的index., 枚举, 注解都需要额外的注意: 方法写文档, 需要为每个参数写文档注释.枚举需要为每个常量写注释.注解需要注释每个成员.

40450
领券