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

Java基础知识(七)--集合

集合 数组和集合存储引用数据类型,存的都是地址值 数组和集合的区别 数组长度是固定的,不能自动增长 集合的长度是可变的,可以根据元素的增加而增长 数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值...,增删快 线程不安全,效率高 泛型 泛型概述 通过参数化类型来实现在同一份代码上操作多种数据类型的技术 泛型好处 提高安全性(将运行期的错误转换到编译期) 省去强转的麻烦 Set HashSet原理 当...()属性相同的对象返回值必须相同,属性不同的返回值尽量不同 equals() 属性相同返回true,属性不同返回false。...) TreeSet类的add()方法中会把存入的对象提升为Comparable类型 调用对象的compareTo()方法和集合中的对象比较 根据compareTo()方法返回的结果进行存储 比较器顺序(...的顺序 TreeSet如果传入Comparator,就优先按照Comparator Map map接口概素 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 Map接口跟Collection

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

    Java泛型和通配符那点事

    理想情况下,您可能会得出这样一个观点,即m是一个Map,它将String键映射到String值。...泛型允许您表达这样的类型约束,即m是一个将String键映射到String值的Map。...s = m.get("key");  当使用Map的泛型化版本时,您不再需要将Map.get()的结果强制类型转换为String,因为编译器知道get()将返回一个String。 ...(不使用泛型)将会接受或返回Object的方法现在在它们的方法签名中使用K或V,指示附加的类型约束位于Map的规格说明之下。 ...这与C++ 约定有所不同(参阅附录 A:与 C++ 模板的比较),并反映了大多数泛型类将具有少量类型参数的假定。对于常见的泛型模式,推荐的名称是:  * K —— 键,比如映射的键。

    1.6K50

    一文讲懂HashMap

    当对 HashMap 放入一个 键值对时,会先对 key 调用 hashCode() 方法计算出一个哈希值,再通过一种散列函数将哈希值映射到 table 数组中的一个位置 index...解决冲突有利于提高 HashMap 中搜索的效率。1. HashMap 的基本原理HashMap 的核心原理是哈希函数,它通过一个哈希函数将键映射到一个索引位置,然后在该索引位置上存储对应的值。...HashMap 中使用了一种叫做“开放地址”的策略来解决哈希冲突,即当两个键映射到同一个位置时,不直接覆盖原有的值,而是通过链表、红黑树等数据结构将这两个值存储在一起。2....HashMap 的泛型参数 HashMap 有一个泛型参数,用于指定键和值的类型。这个泛型参数可以是任何类型,包括基本类型、引用类型和数组类型等。...在HashMap中,键是唯一的,而值可以重复。 2. HashMap的工作原理 HashMap通过将键的哈希值映射到一个数组的索引位置来存储和获取数据。

    71230

    Java程序设计(高级及专题)- 泛型容器(集合框架)

    = new Pair(1,100)不合法; 泛型的本质是参数化类型,所操作的数据类型被指定为一个参数 泛型方法:方法在调用时可以接收不同类型的参数。...根据传递给泛型方法的参数类型,编译器适当地处理每一个方法调用 好处:更好的安全性、更好的可读性 定义泛型方法的规则: ● 所有泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型之前...一个泛型参数,也被称为一个类型变量,是用指定一个泛型类型名称的标识符 ● 类型参数能被用来声明返回值类型,并且能作为泛型方法得到的实际参数类型的占位符 ● 泛型方法体的声明和其他方法一样。...// 传递一个字符型数组 } } 泛型类 泛型类的声明和非泛型类的声明类似,除了在类名后面添加了类型参数声明部分 和泛型方法一样,泛型类的类型参数声明部分也包含一个或多个类型参数,参数间用逗号隔开...,映射值得类型 将键映射到值得对象,一个映射不能包含重复的键,每个键最多只能映射一个值 HashMap,Hashtable,TreeMap,LinkedHashMap 1.HashMap:特点:线程不安全

    52530

    SpringMVC结合设计模式:解决MyBatisPlus传递嵌套JSON数据的难题

    :public class JsonArrayHandler extends BaseTypeHandler> 中的 表示这是一个泛型类,可以适用于不同类型的 JSON 数组字段...通过使用泛型,可以在运行时指定具体的类型,使得处理不同类型的 JSON 数组变得更加灵活和通用。...使用自定义 TypeHandler,可以将 Java 对象的 List 直接映射到数据库的 JSON 字符串,并在读取时将 JSON 字符串转换回 List。...使用自定义 TypeHandler,可以将 Java 对象的 List 直接映射到数据库的 JSON 字符串,并在读取时将 JSON 字符串转换回 List。...使用自定义 TypeHandler,可以将 Java 对象的 List 直接映射到数据库的 JSON 字符串,并在读取时将 JSON 字符串转换回 List。

    22810

    java 之容器

    在Java7中,编译器会根据变量声明时的泛型类型自动推断出实例化所用的泛型类型。...但是它在创建泛型实例时的类型推断是有限制的:只有构造器的参数化类型在上下文中被显著的声明了,才可以使用类型推断,否则不行。...通过前面方法参数类型推断泛型的类型 List.cons(42, List.nil()); Java容器的基本概念 Java容器类库是用来保存对象的,他有两种不同的概念: Collection。...使用remove()将迭代器新近返回的元素删除。...Map Map可以将一个对象映射到另一个对象。在工程上,它是十分重要的数据结构。比如我们有一系列用户分组对象它保存了用户分组的信息,我们经常需要通过用户分组对象获取这个分组的所有用户。

    1.4K80

    Java中常用的API

    :for(集合/数组的数据类型 变量名:集合名/数组名) 7.泛型 泛型:是一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型 泛型也可以看出是一个变量,用来接收数据类型 E e:...Element 元素 T t:Type 类型 创建集合对象,不使用泛型的 好处: 集合不使用泛型,默认的类型就是Object类型,可以储存任意类型的数据 弊端: 不安全,会引发异常 创建集合对象,...使用泛型 好处: 避免类型转换的麻烦,储存是什么什么类型,取出就是什么类型。...extends E 代表使用的泛型只能是E的子类 泛型下线: ?...9可变参数 在jdk1.5之后出现的型特性 使用前提: 网方法的参数数据类型已经确定,但是参数个数不确定,就可以使用可变参数 可变参数原理: 可变参数底层就是一个数组,根据传递的参数个数不同,就会创建不同长度的数组

    1K40

    深入理解 Java 泛型

    这时我可以称class stack是类的类,通过它可以生成具体参数类型不同的类 可以看出泛型是通过对算法中变化的类型的抽象,其它地方的代码相同,唯有类型是可变的,有了泛型后对于编码效率和代码通用有很大的好处...) Code sharing 对每个泛型类只生成唯一的一份目标代码;该泛型类的所有实例都映射到这份目标代码上,在需要的时候执行类型检查和类型转换。...Java编译器的类型转换和类型检查 类型自动转换 既然上面所说Java会在编译时对泛型进行擦除,那么它要实现同一份泛型代码不同类型通用必然需要类型转换,事实上编译器也是这么干的,比如下面的这一段代码:...,编译器会帮我们自动添加类型转换的代码 类型检查 由于类型擦除可能导致的一些异常问题,编译器需要做类型检查来尽量确保程序在运行时不会抛出异常,我们在写泛型相关代码时,将泛型擦除考虑进去后再想这段代码在运行时会不会有异常...Kotlin 相比于Java 类型使用更为安全,泛型数组不支持协变(Java中支持)避免了数组运行时可能导致的类型转换异常,Kotlin中集合类和数组的泛型是有特定关键字来达到“协变”和“逆变”的效果的

    58820

    写一个ORM框架的第一步(Apache Commons DbUtils)

    ,而最终持久化到数据库的时候是以关系型表格的形式存储,也就是说,我们把一个对象化结构的数据映射到了关系型数据库中的这个过程,就是对象关系映射。...List对象,List的泛型参数为Object数组类型 List list = qr.query(sql, handler); return list...ScalarHandler类,泛型参数指定要返回的数据类型,构造方法指定查询结果中的某一列的下标 ScalarHandler handler = new ScalarHandler...ColumnListHandler类, 泛型参数指定要返回的数据类型,构造方法指定查询结果中的某一列的下标 ColumnListHandler handler = new...ColumnListHandler(1); //同样调用query方法执行查询,返回值则是一个List对象,List的泛型参数指定为查询结果转换的类型 List

    80910

    写一个ORM框架的第一步(Apache Commons DbUtils)

    ,而最终持久化到数据库的时候是以关系型表格的形式存储,也就是说,我们把一个对象化结构的数据映射到了关系型数据库中的这个过程,就是对象关系映射。...List对象,List的泛型参数为Object数组类型 List list = qr.query(sql, handler); return list...ScalarHandler类,泛型参数指定要返回的数据类型,构造方法指定查询结果中的某一列的下标 ScalarHandler handler = new ScalarHandler...ColumnListHandler类, 泛型参数指定要返回的数据类型,构造方法指定查询结果中的某一列的下标 ColumnListHandler handler = new...ColumnListHandler(1); //同样调用query方法执行查询,返回值则是一个List对象,List的泛型参数指定为查询结果转换的类型 List

    1.2K90

    219个opencv常用函数汇总

    :从数据的相邻的多列中复制元素; 46、cvGetDiag:复制数组中对角线上的所有元素; 47、cvGetDims:返回数组的维数; 48、cvGetDimSize:返回一个数组的所有维的大小; 49...; 83、cvXor:对两个数组进行按位异或操作; 84、cvXorS:在数组和标量之间进行按位异或操作; 85、cvZero:将所有数组中的元素置为0; 86、cvConvertScaleAbs:计算可选的缩放值的绝对值之后再转换数组元素的类型...cvConvertScale的一个宏,可以用来重新调整数组的内容,并且可以将参数从一种数据类型转换为另一种; 91、cvT:是函数cvTranspose的缩写; 92、cvLine:画直线; 93、cvRectangle...:为名称返回一个惟一的指针; 116、cvGetFileNode:在映图或文件存储器中找到节点; 117、cvGetFileNodeName:返回文件的节点名; 118、cvReadInt:读取一个无名称的整数型...:将数值从笛卡尔空间到极坐标(极性空间)进行映射; 166、cvPolarToCart:将数值从极性空间到笛卡尔空间进行映射; 167、cvLogPolar:对数极坐标变换; 168、cvDFT:离散傅里叶变换

    3.5K10

    Retrofit解析3之反射

    理想情况下,你可能会得出这样一个观点,即m是一个Map,它将String键映射到String值。...这使得代码更加可读,并且减少了出错的机会 (三)、命名类型参数 推荐的命名约定是使用大写的单个字幕作为类型参数。这与C++约定有所不同,并反映了大多数泛型类将具有少量类型参数的假设。...在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会被编译器在编译的时候去掉。这个过程就叫做类型擦除。...(六) 泛型的使用注意事项: 在使用泛型的时候可以遵循一些基本的原则,从而避免一些常见的问题。 在代码中避免泛型类和原始类型的混用。比如List 和List不应该共同使用。...这样会产生一些编译器警告和潜在的运行时异常。 在使用带通配符的泛型类的时候,需要明确通配符所代表的一组类型的概念。由于具体的类型是未知的,很多操作是不允许的。 泛型最好不要和同数组一块使用。

    1.2K20

    Hooks + TS 搭建一个任务管理系统(四)-- 搜索功能实现

    封装 userSelect 组件 将输入框内容映射到 url 上 利用防抖优化输入框请求 先献上效果图 一、封装 UserSelect 组件 这次的项目采用的是 Antd 组件库,在这部分中我们采用...由于我们原生的 Select 组件中对于 onChange 属性的类型是采用泛型来定义的,这会导致我们的 number 类型数据转化成 string ,总之就会导致最后的后端返回数据的类型和 Select...id (param.personId),同时在输入框被选择时触发的事件,用来操控我们的页面 url 变化 二、将输入框内容映射到 url 上 在上一小节我们最后谈到了 url 的变化,确实如此,当我们在输入框中输入内容时...,或者时 Select 中选择内容时,都应该要映射到 url 中,这样我们将 url 复制在新页面打开,还会保留同样的信息,这种功能也是非常常见的,例如掘金社区的文章标题,h1、h2 标签 因此我们有理由...来控制它值的变化,也就这一点不一样的地方 简单说一说这里的泛型吧,这里我们采用了一个泛型 V ,第一个 是用来做泛型声明的,它的类型由我们传入的 value 来指定,value 是什么就是什么

    68520

    java集合(超详细)

    Map:不是Collection的子接口,代表键值对的集合,每个键只能映射到一个值。...泛型在集合中的使用 泛型允许在集合中指定存储对象的类型,从而提供了编译时的类型检查。...map.put("Two", "2"); // 编译错误,因为值的类型被指定为Integer 泛型是Java类型系统的重要组成部分,它提高了集合使用的安全性。...通过在集合声明时指定具体的类型参数,可以避免运行时的类型转换错误,同时也使得代码的意图更加清晰。然而,泛型也带来了一些限制,如在某些情况下无法使用泛型数组,这要求开发者在使用时做出适当的权衡。...集合的转换和不可变集合 Java集合框架允许将一种类型的集合转换为另一种类型。 转换 可以使用Collections类或Java 8的流来进行集合转换。

    16610

    java学习与应用(3.2)--数据结构相关

    for(变量,变量名:集合/数组名){访问变量名} 泛型 泛型,一种未知的数据类型,E代表未知的数据类型,在创建对象时候确定其类型E。默认的E为Object类型。...泛型可以在集合中的数据存储和取出保存相同的类型。在编译期检查代码规范。 创建含有泛型的类,能够让类有通用数据类型的广泛使用。...然后创建实现类,定义泛型的数据类型。也可以继承之前的泛型,然后重写。 泛型的通配符,使用?表示任意接收数据,其实质是Object对象,只能在参数传递时候使用(定义时候不能使用) 泛型的上限限定: ?...extends E 代表使用的泛型只能是E类型的子类/本身,泛型的下限限定: ?...java1.8以后,哈希表使用数组,链表和红黑树提高查询速度。 数组结构:把元素进行了分组(相同哈希值的元素是一组,链表/红黑树结构把相同哈希值的元素连接到一起。每组数量大于8则将链表变成红黑树。

    1.1K10

    Java 集合框架 (1)---- 概述

    /** * 该方法返回一个数组对象,包含了集合中所有的元素, * 如果参数指定的数组容量不小于容器中元素的数量,那么将集合中的元素复制到该数组中, * 否则新建一个数组...,长度为容器元素的数量,将容器元素复制到该数组中并返回新建的数组 * 如果参数为 null,那么抛出 NullPointerException 异常, * 如果参数数组的类型不是容器储存元素类型的父类型...,添加成功返回 true,失败返回 false, * 这是一个泛型定义方法,针对不同的具体集合类应该有不同的处理方式 */ boolean add(E e); /*...> c); /** * 将参数 c 集合中的所有元素添加到当前集合中, * 此方法是一个泛型定义,针对不同具体的集合类应该有不同的处理 */ boolean...,即为映射元素, * 这个接口为 Map 接口中的子接口, * 泛型 K 代表键的类型,泛型 V 代表值的类型 */ interface Entry { /** * 返回当前键值对中的

    96930

    Java魔法堂:解读基于Type Erasure的泛型

    使用泛型方法       使用泛型方法分别有 隐式指定实际类型 和 显式指定实际类型 两种形式。...say(msg);       一般情况下使用隐式指定实际类型的方式即可。   9. 使用泛型数组     只能使用通配符来创建泛型数组 List泛型只生成唯一一份目标代码,该泛型类的所有实例的数据类型均映射到这份目标代码中,在需要的时候执行类型检查和类型转换。... number){} // JDK6后可通过不同的返回值类来解决冲突 // 对于Java语言而言,方法的签名仅为方法名+参数列表,但对于Bytecodes而言方法的签名还包含返回值类型...,根据不同的入参类型和对返回值进行类型转换的组合将导致不同的结果。

    1K50

    Java魔法堂:解读基于Type Erasure的泛型

    使用泛型方法       使用泛型方法分别有 隐式指定实际类型 和 显式指定实际类型 两种形式。...say(msg);       一般情况下使用隐式指定实际类型的方式即可。   9. 使用泛型数组     只能使用通配符来创建泛型数组 List泛型只生成唯一一份目标代码,该泛型类的所有实例的数据类型均映射到这份目标代码中,在需要的时候执行类型检查和类型转换。... number){} // JDK6后可通过不同的返回值类来解决冲突 // 对于Java语言而言,方法的签名仅为方法名+参数列表,但对于Bytecodes而言方法的签名还包含返回值类型...,根据不同的入参类型和对返回值进行类型转换的组合将导致不同的结果。

    1.2K80
    领券