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

Java 编程思想第十二章 - 容器持有对象

List 必须插入的顺序保存元素 Set 不能包含重复元素 Queue 按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)。...Collections.addAll() 方法接受一个 Collection 对象,以及一个数组或是一个逗号分隔的列表将其中元素添加到 Collection 。...HashMap 的顺序不是插入顺序,其使用了非常快速的查找算法 TreeMap 通过比较结果的升序来保存键, LinkedHashMap 在保持 HashMap 查找速度的同时按键的插入顺序保存键。...对于 List ,有一个重载的 addAll() 方法可以将列表插入到原始列表的中间位置,而不是仅能用 Collection 的 addAll() 方法将其追加到列表的末尾。...在列表的尾部(末尾)添加一个元素。 removeLast() 删除返回列表的最后一个元素。

1.3K20

Java8编程思想精粹(十)-容器(上)

因此,使用泛型,你不仅知道编译器将检查放入集合的对象类型,而且在使用集合对象时也可以获得更清晰的语法。 泛型下的向上转型 当指定了某个类型为泛型参数时,并不仅限于只能将确切类型的对象放入集合。...List 必须插入的顺序保存元素 Set 不能包含重复元素 Queue 按照排队规则来确定对象产生的顺序(通常与它们被插入的顺序相同)。 2....HashMap 的顺序不是插入顺序,其使用了非常快速的查找算法 TreeMap 通过比较结果的升序来保存键, LinkedHashMap 在保持 HashMap 查找速度的同时按键的插入顺序保存键...对于 List ,有一个重载的 addAll() 方法可以将列表插入到原始列表的中间位置,而不是仅能用 Collection 的 addAll() 方法将其追加到列表的末尾。...在列表的尾部(末尾)添加一个元素。 removeLast() 删除返回列表的最后一个元素。

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

普林斯顿算法讲义(一)

将所有点放入给定网格单元格列表。任何距离 d 以内的邻居必须在该单元格或其 8 个邻居之一。程序 Grid.java 使用辅助数据类型 Point2D.java 实现了这种策略。...带有重复的二分查找。 修改二分查找,使其始终返回与搜索键匹配的的键的最小(最大)索引。 从建筑物上扔鸡蛋。 假设你有一座N层的建筑物和大量的鸡蛋。...答案:通过构建一个锦标赛树,在 ceil(N + lg(N) - 2) 次比较完成。每个父节点都是其两个子节点中的最小值。最小值最终在根节点处;第二小值在根节点到最小值的路径上。 查找重复。...查找重复。 给定一个包含 N+1 个元素的数组,其中每个元素是介于 1 和 N 之间的整数,请编写一个算法来查找重复。你的算法应在线性时间内运行,使用 O(1) 额外空间,并且不得修改原始数组。...查找重复。 给定一个包含 0 到 N 之间的 N+2 个整数的排序数组,其中恰好有一个重复,设计一个对数时间复杂度的算法来找到重复。 提示 二分查找

8910

数据结构和算法

数据通过推送添加,通过pop顶部删除。 ? image 队列:队列是FIFO数据结构。在该结构,在一端插入元件,从另一端移除现有元件。 ?...如果掌握了java集合,它将为您节省大量时间并有助于解决复杂问题。 ArrayList: ArrayList类是List接口的可调整大小的数组实现。它实现所有可选的列表操作允许所有元素。 ?...每次迭代都会从输入数据删除一个元素,并将其插入正在排序的列表的正确位置。它对于较小的数据集是有效的,但对于较大的列表而言效率非常低。...image 搜索:搜索是基于密钥查找内容。有线性搜索和二进制搜索。 线性搜索:线性搜索是一种在列表查找目标值的方法。它按顺序检查列表每个元素的目标值,直到找到匹配或者直到搜索完所有元素为止。...image 二进制搜索:二进制搜索是一种有效的算法,用于从有序的项目列表查找项目。它的工作原理是反复将列表可能包含该项目的部分分成两半; 直到你将可能的位置缩小到一个。

2K40

第二章(1.5)Python基础知识(数据类型)

, list2):比较两个列表的元素 len(list):列表元素个数 max(list):返回列表元素最大值 min(list):返回列表元素最小值 list(seq):将元组转换为列表 列表操作包含以下方法...: list.append(obj):在列表末尾添加对象 list.count(obj):统计某个元素在列表中出现的次数 list.extend(seq):在列表末尾一次性追加另一个序列的多个值...(用列表扩展原来的列表) list.index(obj):从列表找出某个值第一个匹配的索引位置 list.insert(index, obj):将对象插入列表 list.pop(obj=list...[-1]):移除列表的一个元素(默认最后一个元素),并且返回该元素的值 list.remove(obj):移除列表某个值的第一个匹配 list.reverse():反向列表中元素 list.sort...dict内部存放的顺序和key放入的顺序是没有关系的。

37020

第二章(1.5)Python基础知识(数据类型)

一、list(列表) list是一种有序的集合,可以随时添加和删除其中的元素 用len()函数可以获得list元素的个数 列表操作包含以下函数: cmp(list1, list2):比较两个列表的元素...(obj):在列表末尾添加对象 list.count(obj):统计某个元素在列表中出现的次数 list.extend(seq):在列表末尾一次性追加另一个序列的多个值(用列表扩展原来的列表)...list.index(obj):从列表找出某个值第一个匹配的索引位置 list.insert(index, obj):将对象插入列表 list.pop(obj=list[-1]):移除列表的一个元素...(默认最后一个元素),并且返回该元素的值 list.remove(obj):移除列表某个值的第一个匹配 list.reverse():反向列表中元素 list.sort([func]):对原列表进行排序...dict内部存放的顺序和key放入的顺序是没有关系的。

38930

13.2 具体的集合

Set(集):集合的元素不按特定方式排序,并且没有重复对象。他的有些实现类能对集合对象按特定方式排序。...List(列表):集合的元素按索引位置排序,可以有重复对象,允许按照对象在集合的索引位置检索对象。...Map(映射):集合的每一个元素包含一对键对象和值对象,集合没有重复的键对象,值对象可以重复。他的有些实现类能对集合的键对象进行排序。 ?...在Java,散列表用链表数组实现,每个列表称为桶(bucket)。要想查找对象的位置,就需要计算它的散列码,然后与桶的总数取余,所得到的结果就是保存这个元素的桶的索引。...set的add方法首先在集合查找要添加的对象,如果不存在,就将这个对象添加进去。   java集合类库提供了一个HashSet库,它实现了基于散列表的集。可以用add方法添加元素。

1.8K90

Java-持有对象

基本概念 Java容器类类库的用途是“保存对象”,并将其划分两个不同的概念: 1)Collection。一个独立元素的序列,这些元素都服从一条或多条规则。...List必须按照插入的顺序保存元素,而Set不能有重复元素。Queue按照排队规则来确定对象产生的顺序(通常于它们被插入的顺序相同) 2)Map。一组成对的“键值对”对象,允许你使用键来查找值。...如果存储顺序很重要,那么可以使用TreeSet,它按照比较结果的升序保存对象;LinkedHashSet按照被添加的顺序保存对象 Map可以使用键来查找对象,键所关联的对象称为值。...LinkedList在随机访问方面相对比较慢,但是它的特性集较ArrayList更大 List常见的方法: contains()方法来确定某个对象是否在列表。...迭代器 迭代器是一个对象,它的工作是遍历选择序列对象。此外迭代器通常被称为轻量级对象:创建它的代价小。

1.1K10

面试系列之-JAVA集合梳理(JAVA基础)

接口没有什么关系; ●List集合是有序集合,集合的元素可以重复,访问集合的元素可以根据元素的索引来访问; ●Set集合是无序集合,集合的元素不可以重复,访问集合的元素只能根据元素本身来访问(也是集合里元素不允许重复的原因...函数来比较元素的,它是通过compare或者comparaeTo函数来判断元素是否相等,compare函数通过判断两个对象的id,相同的id判断为重复元素,不会被加入到集合。...; Iterator仅有一个子接口ListIterator,是列表迭代器,允许程序员按任一方向遍历列表、迭代期间修改列表获得迭代器在列表的当前位置。...在长度为n的列表,有n+1个有效的索引值,从0到n(包含); 集合框架之外的Map接口 Map将键映射到值的对象,一个映射不能包含重复的键;每个键最多只能映射一个值;Map接口是Dictionary...; 2CopyOnWrite开头的集合类,采用复制底层数组的方式来实现写操作,读时无须加锁,对复制的数组进行写操作,所以线程安全,频繁的复制数组,性能比较差,但读操作因为没有加锁和阻塞就很快、很安全

15410

各大厂都在考的 Java 集合知识点总结,不来看看???

Java 集合就像容器,能够将多个同类型的对象装进该容器,所以又叫容器。...集合 vs 数组 集合和数组都是 Java 重要的数据结构,两者之间的区别主要有如下两点: 不同点 数组 集合 容量 初始化时指定,只能存储定长数据 保存不定长的数据 存储的数据类型 基本数据类型,对象均可...HashSet 判断集合元素相等 不同的对象进行比较,可以有如下四种情况: 若两元素通过 equal() 方法比较返回 false,但两者的 hashCode() 返回不相等,则将其存储在不同位置;...若两元素通过 equal() 方法比较返回 true,但两者的 hashCode() 返回不相等,则将其存储在不同位置; 若两元素通过 equal() 方法比较返回 false,但两者的 hashCode...() 返回相等,则将其存储在相同位置,在这个位置链表式结构来保存多个对象

3.9K30

Java的List,如何删除重复的元素,教你三个方法搞定!

当我们在Java中使用List时,有时候需要从列表删除重复的元素。这可以通过以下几种方法来实现:图片方法1: 使用HashSetHashSet是一种无序的集合,它不允许重复元素存在。...然后,我们将该List传递给一个的HashSet实例,这将自动删除重复。最后,我们将HashSet转换回List获得没有重复列表。...然后,我们将该List传递给一个的LinkedHashSet实例,这将自动删除重复保留原始顺序。最后,我们将LinkedHashSet转换回List获得没有重复列表。...然后,我们通过调用stream()方法将其转换为Stream对象。接着,我们调用distinct()方法来删除重复,并将结果收集到一个的List。...这些是从Java List删除重复的三种方法。根据你的需求和偏好,你可以选择其中一种来实现。

1.4K10

Java集合总结

当向容器添加元素时,如果容量不足,容器会自动增大底层数组的大小。前面已经提过,Java泛型只是编译器提供的语法糖,所以这里的数组是一个Object数组,以便能够容纳任何类型的对象。...TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0 自然排序是根据集合元素的大小,升序排列,如果要定制排序,应该使用Comparator...(2)HashSet 是哈希表实现的,HashSet的数据是无序的,可以放入null,但只能放入一个null,两者的值都不能重复,就如数据库唯一约束。...(3)HashSet要求放入对象必须实现HashCode()方法,放入对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashCode是一样,所以放入的内容不能重复。...对于使用链表法的散列表来说,查找一个元素的平均时间是O(1+a),因此如果负载因子越大,对空间的利用更充分,哈希冲突多,然而后果是查找效率的降低;如果负载因子太小,哈希冲突少,那么散列表的数据将过于稀疏

63022

HashMap、LRU、散列表

底层就是一个数组结构,数组的每一又是一个链表。 ? hashCode是一个对象的标识,Java对象的hashCode是一个int类型值。...在第 8 行代码,再次将键值为 3 的数据放入到 LinkedHashMap 的时候,会先查找这个键值是否已经有了,然后,再将已经存在的 (3,11) 删除,并且将的 (3,26) 放到链表的尾部。...当数据量比较小、装载因子小的时候,适合采用开放寻址法。这也是 Java 的ThreadLocalMap使用开放寻址法解决散列冲突的原因。...当有数据要插入时,我们将数据插入列表,并且从老的散列表拿出一个数据放入列表。每次插入一个数据到散列表,我们都重复上面的过程。...对于查询操作,为了兼容了、老散列表的数据,我们先从新散列表查找,如果没有找到,再去老的散列表查找。 部分内容摘抄至极客时间《数据结构与算法之美》

1K51

PhotoSweeper X for Mac(重复照片清理工具)

易于使用,快速,功能强大,美观的复制照片清洁为Mac文件和文件夹查找消除硬盘或外部存储上的重复。删除后,照片将系统废纸篓,因此可以恢复。...删除时,PhotoSweeper不会删除文件,但会将其标记为“已拒绝”放入特殊集合。 你为什么需要PhotoSweeper?...编辑图片查找具有不同图像尺寸,颜色饱和度的重复,甚至可以使用Photoshop,Pixelmator等应用程序进行编辑。...灵活的设置强大的多重设置,轻松查找重复,类似照片,系列镜头。您可以在运行调整结果的匹配级别。快速经过优化,支持64位和多核处理器,PhotoSweeper可以显示Mac的真正强大功能。...其他改进PhotoSweeper在整个应用程序附带了各种其他增强功能和现代化的列表

70310

【设计模式】之对象池模式--JDBC连接池简单实现案例

对象池设计模式 源代码Github地址戳这里… 对象池设计模式的目标 对象池可以显著提高性能,在那些初始化一个类实例的代价比较高、但是使用频率比较低的场景时,对象池模式是非常高效的。...null; }else{ if( validate(t) ){ // 可用,则将其从可用列表移除...,则创建对象 t = create(); // 将对象放入锁定列表 locked.put(t, now); // 返回对象...当可用列表没有对象时,可以选择新建对象应对客户端的请求,并将对象放入锁定列表。 可用列表存在可用对象,则判断其是否可用,可用则当如锁定列表返回该对象。...使用完对象后,注意将该对象回收到池中,从锁定列表移除,放入可用列表且更新有效时间。

26010

【图解数据结构】外行人也能看懂的哈希表

案例 处理手机号码,因为手机号码前几位重复的可能性很大,但后面几位就比较随机,可以取手机号后四位作为散列值。...通过hash函数求出要查找元素的键值对应的散列值,然后比较数组中下标为散列值的元素和要查找的元素: 若相等 则为目标元素 否则 继续顺序往后查找 若遍历到数组的空闲位置,还没找到,说明目标元素不在散列表...当数据量比较小、装载因子小的时候,适合采用开放寻址法。这也是Java的ThreadLocalMap使用开放寻址法解决散列冲突的原因。 3.2 链表法 相比开放寻址法简单。...当装载因子达阈值后,只申请空间,但并不将老数据搬移到hash表。 当有数据插入,将数据插入hash表,并从老原hash表拿出一个数据放入hash表。...} 其中,hashCode()返回的是Java对象的hash code。

67620

【图解数据结构】外行人也能看懂的哈希表

案例 处理手机号码,因为手机号码前几位重复的可能性很大,但后面几位就比较随机,可以取手机号后四位作为散列值。...通过hash函数求出要查找元素的键值对应的散列值,然后比较数组中下标为散列值的元素和要查找的元素: 若相等 则为目标元素 否则 继续顺序往后查找 若遍历到数组的空闲位置,还没找到,说明目标元素不在散列表...当数据量比较小、装载因子小的时候,适合采用开放寻址法。这也是Java的ThreadLocalMap使用开放寻址法解决散列冲突的原因。 3.2 链表法 相比开放寻址法简单。...当装载因子达阈值后,只申请空间,但并不将老数据搬移到hash表。 当有数据插入,将数据插入hash表,并从老原hash表拿出一个数据放入hash表。...} 其中,hashCode()返回的是Java对象的hash code。

88510

Java集合类详解

除了四个历史集合类外,Java 2 框架还引入了六个集合实现,如下表所示。关于历史集合类如何转换、比如说,如何修改Hashtable 结合到框架,请参阅历史集合类 。...容器类对象在调用remove,contains等方法时需要比较对象是否相等地,这会涉及到对象类型的equals方法和hashcode方法。... T[] 按照定义,Set 接口继承 Collection 接口,而且它不允许集合存在重复。所有原始方法都是现成的,没有引入新方法。...接着,程序把集中名字的列表打印出来,演示了重复的名字没有出现。接着,程序把集作为TreeSet 来处理,显示有序的列表。...用户可以根据元素的整数索引(在列表的位置)访问元素,搜索列表的元素。 与 set 不同,列表通常允许重复的元素。

89920

数据结构:线性表——2.2 列表

该算法首先如图(b) 所示创建节点 new,构造函数同时将其数据置为 e,令其后继链接 succ 指向当前节点,令其前驱链接 pred 指向当前节点的前驱节点。...在输入参数合法的前提下,copyNodes() 首先调用 init() 方法,创建头、尾哨兵节点做相应的初始化处理,然后自 p 所指节点起,从原列表取出 n 个相邻的节点,逐一作为末节点插至列表... succ ); //反复删除首节点,直至列表变空 } ---- 列表的析构 ---- 与所有对象一样,列表对象析构时,将其所占用的资源归还操作系统...---- 有序列表的唯一化 ---- 与有序向量同理,有序列表的雷同节点也必然在逻辑上彼此紧邻。利用这一特性,可实现重复节点删除算法。...于是只需将 e 从无序后组取出,紧邻于查找返回的位置之后插入,即可使得有序前缀的范围扩大至 S[0,r]。 如此,该前缀的范围可不断拓展。当其最终费盖整个序列时,亦即整体有序。

28720

数据结构:线性表——2.2 列表

---- 默认构造 ---- 创建 List 对象时,默认构造方法将调用统一初始化过程 init(),在列表内部创建一对头、尾哨兵节点,适当地设置其前驱、后继指针构成一个双向链表。...该算法首先如图(b) 所示创建节点 new,构造函数同时将其数据置为 e,令其后继链接 succ 指向当前节点,令其前驱链接 pred 指向当前节点的前驱节点。...在输入参数合法的前提下,copyNodes() 首先调用 init() 方法,创建头、尾哨兵节点做相应的初始化处理,然后自 p 所指节点起,从原列表取出 n 个相邻的节点,逐一作为末节点插至列表... succ ); //反复删除首节点,直至列表变空 } ---- 列表的析构 ---- 与所有对象一样,列表对象析构时,将其所占用的资源归还操作系统...---- 有序列表的唯一化 ---- 与有序向量同理,有序列表的雷同节点也必然在逻辑上彼此紧邻。利用这一特性,可实现重复节点删除算法。

1.5K10
领券