如何选择集合

从医疗成像到工业检测:CMOS图像传感器NIR技术的最新应用案例解析 本文深入解析了CMOS图像传感器NIR技术在医疗成像和工业检测中的最新应用案例。通过提升量子效率至70%,NIR技术实现了血管可视化、材料缺陷检测等突破性进展,显著提高了医疗诊断精度和工业质检效率。文章还探讨了系统集成关键考量和前沿发展趋势。 阅读详情

在编程的过程中,选择何种集合至关重要,下面由我来总结下选择集合的方法

 

选择集合所考虑的关键问题在于:效率代价与空间代价的平衡问题。

效率代价是指执行的效率,简单的说如果一个资源没有把索引记录下来,那么要找到他你就需要执行程序,那么你的代价在于系统花钱了时间。

空间代价是指存放的空间消耗内存的代价,如上边说到的如果把索引记录下来很方便就能找到要找的资源,也就是用空间代价换取运行时间的缩短。这就像电话本除了记号码还要记人名,总不能一个个打电话去问谁是张三李四的吧。

我想说的是,现在的储存器越来越便宜,空间可以说不是难题,空间代价不是优先考虑的问题。

 

下面我们来分析下各种常用的集合数据类型

1.       ArrayList:数组实现的保持进入顺序的集合。
查询元素操作(提供索引位置):计算元素内存指针位置,一步便可跳到。
增加元素操作:查询到增加位置的元素,后面的元素挨个向后移一个位置,保存元素的      时间可以忽略不计
删除元素操作:查询到增加位置的元素,后面的元素挨个向前移一个位置,清空元素的时间可以忽略不计
修改元素操作:与查询元素操作效率相同

2.       LinkedList:链表实现的保持进如顺序的集合。
查询元素操作(提供索引):从根节点遍历,不能跳越,直到索引要求的位置。
增加元素操作:查询到增加位置的元素,接上链的时间忽略不计
删除元素操作:查询到增加位置的元素,拆下链的时间忽略不计
修改元素操作:与查询元素操作效率相同

3.       HashSet/HashMap:无序的Hash算法来索引的集合
查询元素操作:HashCode经过Hash算法直接指向内存地址,而后调用指向的数据的equals(),如果不等,继续Hash算法。
增加元素操作:查询到增加位置的元素,保存的时间忽略不计
删除元素操作:查询到增加位置的元素,删除的时间忽略不计
修改元素操作:与查询元素操作效率相同

4.       TreeSet/TreeMap:根据指定值排序的集合,低层是链表
查询元素操作:红黑二分查找树算法,链表遍历跳过部分节点,效率大于LinkedList
增加元素操作:查询到增加位置的元素,接上链的时间忽略不计
删除元素操作:查询到增加位置的元素,拆下链的时间忽略不计
修改元素操作:与查询元素操作效率相同

 

性能分析表:

集合/操作

A增

B删

C查

D改

顺序性

ArrayList

C+④

=A

①   

=C

进入顺序

LinkedList

C+①

=A

④

=C

进入顺序

HashSet/HashMap

C+②

=A

②   

=C

无顺序

TreeSet/TreeMap

C+③

=A

③   

=C

指定顺序

注释:=A表示效率上等于其A操作,也就是增操作,=C也同理;C+①表示查询效率要加入计算。

 

从上面中最核心的问题是ArrayList增删操作与LinkedList查找操作代价比较

案例1:ArrayList与LinkedList的add/remove操作的比较

分析1:低效率ArrayList.add/remaove操作的原因在于增删操作可能会引起元素的交换,而LinkedList的增删只需要接链头和链尾。

结果数据1:ArrayList的100万次的交换消耗了3mm

 

案例2:ArrayList与LinkedList的get操作的比较

分析2:LinkedList的查找操作效率低的原因是必须遍历过程中的每个节点,但是遍历一次仅相当于getter方法调用消耗非常小。

结果数据2:LinkedList的166万次的遍历都消耗都不到1mm

 

结论:通过以上案例测试得知,遍历元素与交换元素的效率差至少是十万级的。所以我们几乎可以忽略LinkedList查询的效率,而HashSet/HashMap,TreeSet/TreeMap效率比LinkedList还要高,也可以忽略其查询效率。

由此,应修改性能分析表如下:

 

性能分析表:

集合/操作

A增

B删

C查

D改

顺序性

ArrayList

④

=A

①

=C

进入顺序

LinkedList

①

=A

④

=C

进入顺序

HashSet/HashMap

②

=A

②

=C

无顺序

TreeSet/TreeMap

③

=A

③

=C

指定顺序

 

总结:

1:如果元素没有顺序要求,有优的选择是HashSet/HashMap,其增删查找的效率都很高。

2:如果元素有顺序要求,对于ArrayList、LinkedList和TreeSet/TreeMap都可以实现,只是ArrayList、LinkedList需要控制进入顺序,而TreeSet/TreeMap需要值记录顺序。如果记录顺序的值很方便提供,优先选择TreeSet/TreeMap。

3:如上述有顺序要求,而记录顺序的值不方便提供的情况,如Stack,如果提供入栈时间比较冗余。这个时候则考虑集合会不会出现元素顺序改动的增删操作,如果会则选择LinkedList。如案例1,2中的结论ArrayList的单位次交换耗时至少是LinkedList遍历一个节点的50万倍以上。

4:如上述情况有顺序要求,并且不希望提供值来排序,而且集合的顺序基本不会发生改变,选择ArrayList。

 

选择Set还是Map?

误点1:Map比Set数据多出一个维度,那么就可以利用多出的部分影响顺序或多出快捷收索功能。

正解1:原则是一个集合对象只能提供一个索引。

    对于Map其有效的索引则是key(实际上是key的equals和HashCode),而value是不能主导一个条目的,如Map的remove就不能通过value来删除,Map也不支持Value找到key的方法(如果iterator遍历找到key那就不能称之为索引到)。

    还是一个真理一个集合仅提供一个索引,Set和Map的区别只在于,索引是否唯一且数据本身就可以提供。只有满足这两个条件才可以使用Set。因为Set有赖于元素本身的equals/hashCode和comparTo方法,而这些方法只能由属性运算得出结果,所以属性要求有能力提供出索引。而Set的元素类型一旦被确定,也就说用两个Set为同一个数据加索引,其索引规则相同,这是因为元素类独有一份equals/hashCode和comparTo方法的实现。

    如果索引需要多个或数据对象的属性没有能力给出此索引,那么我们会选择Map。Map的key可以是我们定制的对象类型,也就是提供不同的equals/hashCode和comparTo的方法实现,而不像Set只能调用到数据本身的一种实现。选择不同的key类型就会得到不同的方法实现,建立不同的索引,从而多个Map能实现多个索引。

    如果希望同一个数据可能会被多种值检索到,那么就为他们各自建立一个Map,多个Map多个索引方式。Map总是能实现索引,而Set只能提供自身的一种索引,Set是Map的特例情况。

【2025年阿里云暑期实习(算法岗)-4月24日-第一题(100分)- 小红听歌】(题目+思路+Java&C++&Python解析+在线测试) 小红正在听歌,屏幕上同时展示着歌词和对应的播放进度条。s1t101ti​0iti​1i小红每次可以操作快进或回退一个歌词(即将播放指针向右或向左移动一个位置),数据初始时和操作过程均保证已经播放的歌词是s的一个前缀(可为空串)。她的目标是:以尽可能少的操作次数,使得字符串s中未播放状态的歌词是"幸运串"。请你计算,为了达到该目标,至少需要多少次操作?(数据保证可以在有限次内完成操作目标)【幸运串】每种字母出现的次数为指定的次数,可为空串,具体可查看输入描述。 阅读详情

相关推荐

【谷粒商城】分布式事务与下单

=购物车== 构建gulimall-cart,复制静态资源到nginx,修改网关 购物车分为离线购物车和登录购物车 离线购物车重启浏览器了也还有 1、购物车需求 特点:读多写少,放入数据库并不合适 登录状态:登录购物车 放入数据库 mongodb 放入redis(采用) 登录以后,将离线购物车里合并后清空离线购物车 未登录状态:离线购物车 放入localstorage浏览器的技术 cookie WebSQL 放入redis(采用) 浏览器重启后还在 2、购物车VO (1) 数据结构分析

努力充实,远方可期 1万+

Java如何选择合适的集合

选择集合时要考虑的问题 1、要处理的数据类型 List,Queue和Set接口存储单个元素,而Map接口的实现始终存储键值对 2、元素是否重复出现 Set接口的实现仅存储唯一的元素,而List的实现可以存储重复的元素 3、访问元素的途径 ArrayList通过索引提供对其元素的访问,但是ArrayDeque提供对第一个元素和最后一个元素的受限访问 4、集合性能表现 通常,功能越丰富的集合,性能就越差。例如,LinkedHashSet的性能比普通的HashSet差 大多数情况下都可以通过这个

Y_goblin的博客 757

±10V ADC 输入电路的高共模差分输入电压

这篇文章分析了±10V ADC输入电路的设计需求与挑战,重点讨论了高共模差分输入电压的处理方案。文章首先明确了设计目标,即安全转换±10V差分信号并保持信号完整性,同时克服高共模电压、阻抗匹配和噪声优化等难点。随后详细比较了仪表放大器和差分放大器的性能特点,并提出了器件选型理论。在信号链架构部分,文章通过公式推导阐述了增益设置、共模抑制设计和输入阻抗匹配等关键技术。此外,还建立了噪声源模型,提出了噪声优化措施。最后,文章总结了设计验证方法,并扩展了在工业保护和生物电信号采集等场景的应用。该设计强调根据具体应

泛红尘的博客 1959

如何选用集合

主要根据集合的特点来选用,比如我们需要根据键值获取到元素值时就选用 Map 接口下的集合,需要排序时选择 TreeMap,不需要排序时就选择 HashMap,需要保证线程安全就选用 ConcurrentHashMap。 当我们只需要存放元素值时,就选择实现Collection 接口的集合,需要保证元素唯一时选择实现 Set 接口的集合比如 TreeSet 或 HashSet,不需要就选择实现 List 接口的比如 ArrayList 或 LinkedList,然后再根据实现这些接口的集合的特点来选用。 .

是木子啦~ 349

Pcileech(DMA)开源项目简述

希望大DMA家能正确认识FPGA,正确使用DMA技术,对于市场上各类伪装成花里胡哨设备的FPGA板卡它的本质是不会变的,不要上当受骗。

2301_79773847的博客 5960

C51红外接收与发射控制及原理编码与解码

基于38khz的NEC协议红外发射简易电路图NEC协议产生红外光数据编码 0 1结合程序红外接收接收电路解码过程解码代码 红外发射 通过通过红外二极管发射红外光,三极管的状态来控制。 红外模块一般都是三个引脚,vcc,gnd,dat,通过控制dat口的来控制发射红外光。 简易电路图 将数据口连接到单片机的引脚为上,控制io口的电平状态,来控制三极管的导通状态,从而发射红外光。 NEC协议 NEC协议特点:8位地址和8位命令为提高可靠性,地址和命令都传输2次,脉冲间隔调制38kHz载波频率。 包含引导码,

yangfeng20的博客 1万+

集合和集合的选择

java中的集合介绍 学习东西,首先要知道学习他有什么用,他能够带给我什么样的效果。只有知道什么时候用,怎么用,这样才会对我们有用处,不然百学浪费时间。本篇主要讲解java中的常使用的集合的简单对比,没有讲到集合的细节,更深了解集合的方法就从javaAPI中自己学习更多的。 首先知道java中为什么要用集合这个概念 java操作比较多的数据是一般会用到数组,但是对于对象,数据比较庞大的数据...

weixin_44482485的博客 607

DSP的CLA调试技巧

本文介绍了基于TMS320F28377D的CLA(Control Law Accelerator)开发实战教程,涵盖基础配置、编程、调试与优化全流程。主要内容包括:CLA核心特性及其作为实时控制协处理器的优势;开发环境搭建与工程配置要点;CLA任务调度、数据交换及编程约束;调试技巧如断点设置和性能分析方法;进阶应用案例(批量除法运算)及优化策略;以及推荐的学习资源和硬件平台。教程强调数据一致性和任务同步问题,为快速上手CLA开发提供实用指导。

1041

java中的集合和集合的选择

一、java中的集合介绍   学习东西,首先要知道学习他有什么用,他能够带给我什么样的效果。只有知道什么时候用,怎么用,这样才会对我们有用处,不然百学浪费时间。本篇主要讲解java中的常使用的集合的简单对比,没有讲到集合的细节,更深了解集合的方法就从javaAPI中自己学习更多的。1.首先知道java中为什么要用集合这个概念   1). java操作比较多的数据是一般会用到数组,但是对于对象,数据...

小菜鸟 5681

wxComboBox类的使用方法及示例代码

其中,parent表示该控件的父窗口,ID_COMBOBOX是该控件的ID,用于在事件处理函数中区分不同的控件,"默认选项"是下拉列表框的默认选项,options是wxArrayString类型的数组,用于存储下拉列表框中的选项,style可以指定wxComboBox的样式。wxComboBox是wxWidgets中的一个常用控件,它可以被用来显示一组在下拉列表框中的选项,并允许用户从中选择一个选项。上述就是wxComboBox类的基本使用方法,使用这个控件可以方便地实现下拉列表框的功能。

学习使你进步。 712

matlab 计算点云粗糙度

A Correspondence Framework for ALS Strip Adjustments based on Variants of the ICP Algorithm

点云侠的博客 1828

Java集合有哪些?如何选择使用?

文章目录一、java中的集合介绍1.首先知道java中为什么要用集合这个概念2.java中的集合族的基本介绍3.java中的单列结合3.1 单列各个集合底层数据结构和基本性质4.java的双列集合二、java中的集合的使用1.如何正确的使用集合了?2.集合的遍历方法:三、java中的集合的选择1.单列还是双列:2.选择单列后看元素是否唯一 一、java中的集合介绍 学习东西,首先要知道学习他有什么...

Tang 1735

4.4 直流无刷电机(BLDC):控制器硬件设计

摘要 本文详细阐述了直流无刷电机(BLDC)控制器的硬件设计要点。控制器硬件主要包括微处理器单元、功率驱动模块、信号检测电路、通信接口和电源管理模块。在微处理器选型方面,分析了ARM Cortex-M系列、DSP等架构的适用场景,并对比了不同处理器的性能参数。功率驱动模块设计重点包括栅极驱动电路、逆变桥热管理和电流保护机制。信号检测部分介绍了位置传感器接口和模拟信号调理技术。此外,还讨论了通信接口设计、电源管理方案以及硬件布局与EMC设计规范。最后强调了硬件测试验证的重要性,包括故障注入测试等验证方法。整体

技术工作者 183

java中集合的分类以及集合的选择

java中集合的分类以及集合的选择

wazz753的专栏 344

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

C#集合类选择

一定要谨慎选择 System.Collections 类。选用错误的类型可能限制您使用集合。考虑以下问题:您是否需要一个序列列表,其中的元素通常在检索其值后被放弃? 如果需要,那么在需要先进先出 (FIFO) 行为时请考虑使用 Queue 类或 Queue 泛型类。在需要后进先出 (LIFO) 行为时请考虑使用 Stack 类或 Stack 泛型类。如果不需要,请考虑使用其他集合。是否需要以某种顺序访问元素,例如 FIFO、LIFO 或随机访问? Queue 类和 Queue 泛型类提供 FIFO 访问。S

O Wen 586

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

开发中如何选择集合

张铎 2231

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Set集合——HashSet集合、LinkedHashSet集合、TreeSet集合、集合的选择

跟HashSet相比,LinkedHashSet可以保证存储和取出地元素顺序一致TreeSet可以按照可以按照元素地默认规则(由小到大)排序TreeSet集合底层是基于红黑树数据结构实现排序的,增删改查性能都很好。

l_tian_tian_的博客 758

java 集合 之 如何选择集合

使用java集合的 “缺点” 集合不能使用基本数据类型,只能使用对象句柄 在将对象置入一个集合时丢失了类型信息,集合实际容纳的是类型为Object 的一些对象的句柄,但不包含基本数据类型,不存在类型信息,使用之前要进行类型塑造。 集合框架 集合比较 个人总结 如何选择集合: 是否键值对:   是:Map     键是否排序:       ...

enjoy.day 874

如何选择使用C#中的集合

名称空间 集合分类 连续存储空间 离散存储空间 集合的选择 名称空间 System.CollectionsSystem.Collections.Generic:泛型集合System.Collections.Specialized:专用于特定类型的集合System.Collections.Concurrent:线程安全集合 集合分类 连续存储空间 Arr

骑乐在途-的专栏 659

应该怎样选择集合

应该怎样选择集合 如果要求线程安全,使用Vector、Hashtable 如果不要求线程安全,应使用ArrayList、LinkedList、HashMap 如果要求键值时,则使用HashMap、Hashtable 如果数据量大,又要线程安全考虑Vector。 转载于:https://www.cnblogs.com/meng72ndsc/archive/20...

dengyue5705的博客 150

选择适合你需求的集合

public class List_Select_attion { public static void main(String[] args) { System.out.println("选那种集合看具体要求选择:"); Scanner scanner=new Scanner(System.in); while (true) { System.out.println("1.如果希望元素可以重复,又有索引,索引查询要快")...

WzAChun的博客 386

Java中集合的简介和选择

Thinking in Java 阅读笔记,回顾集合部分 Java集合 在Java中集合主要分为: Collection(List,Set,Queue) Map(HashMap,SortedMap) 其中List和Set可分为: List(Stack,ArrayList,LinkedList) Set(HashSet,TreeSet,SortedSet) Collection接口 该接口包含许多方法,这些方法也是可以通过Set和List执行 boolean add(T) 为容器中添加一个元素,若添加失.

weixin_42857937的博客 398

对于集合的选择

7.1、对List的选择        1、对于随机查询与迭代遍历操作,数组比所有的容器都要快。所以在随机访问中一般使用ArrayList        2、LinkedList使用双向链表对元素的增加和删除提供了非常好的支持,而ArrayList执行增加和删除元素需要进行元素位移。        3、对于Vector而已,我们一般都是避免使用。        4、将Arr

a12136的博客 336

选择集合类

选择集合类时务必要仔细。选用错误的类型可能限制您使用集合。通常,应避免使用 System.Collections 命名空间中的类型,除非您专门将目标版本定为 .NET Framework 版本 1.1。首选使用集合的泛型版本和并发版本,这是因为二者具有更高的类型安全性和其他改进。 考虑以下问题: 您是否需要一个序列列表,其中的元素通常在检索其值后被放弃? 如果需要,那么在需...

103

线程安全集合选择深度解析

全表锁:Vector/Hashtable(简单但低效,仅适用于遗留系统)。细粒度锁:ConcurrentHashMap(JDK 1.8+,锁粒度到桶,高并发首选)。无锁 / CAS:ConcurrentLinkedQueue(无阻塞,适合低延迟队列)。写时复制:CopyOnWriteArrayList(读多写少,允许最终一致性)。

kfashfasf的博客 1043

开发中如何选择集合类

在开发中,选择什么集合实现类,主要取决于业务操作特点,然后根据集合实 现类特住进行选择,分析如下: 1. 先判断存储的类型: 一组对象或一组键值对 2. 一组对象: Collection接口 允讦重复: List 增删多:LinkedList —— 底层维护了一个双向链表 改查多:ArrayList —— 底层维护 Object 类型的可变数组 不允讦重复 :Set 无序: HashSet —— 维护了一个哈希表,即 数组+链表/树 排序: TreeSet 插入和取出顺序一致:LinkedHas

圆的博客 201
上一篇: 如何OGNL理解
下一篇: Eclipse中添加文档注释快捷键
wankaiming
博客等级 码龄15年 49粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值