Java五个最常用的集合类之间的区别和联系
集合类型主要有3种:set(集)、bailist(列表)和map(映射)。
1、List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。
2、Set(无序、不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。
3、Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。
常用的集合类有一下几种: List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类 Map结构的集合类:HashMap类,Hashtable类 Set结构的集合类:HashSet类,TreeSet类 Queue结构的集合:Queue接口 HashMap和Hashtable的区别: HashMap和Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点 以下是他们的区别: 1.历史原因: Hashtable是基于陈旧的Dictionary类的,HashMap是java 1.2引进的Map接口的一个现实。 2.同步性: Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的,因为同步的要求会影响执行的效率,所以如果你不需要线程安全的结合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率,我们一般所编写的程序都是异步的,但如果是服务器端的代码除外。 3.值: HashMap可以让你将空值作为一个表的条目的key或value Hashtable是不能放入空值(null)的 ArrayList和Vector的区别: ArrayList与Vector都是java的集合类,都是用来存放java对象
常用的集合类有一下几种:List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类
Map结构的集合类:HashMap类,Hashtable类
Set结构的集合类:HashSet类,TreeSet类
Queue结构的集合:Queue接口
HashMap和Hashtable的区别:
HashMap和Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点
以下是他们的区别:
1.历史原因:
Hashtable是基于陈旧的Dictionary类的,HashMap是java 1.2引进的Map接口的一个现实。
2.同步性:
Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的,因为同步的要求会影响执行的效率,所以如果你不需要线程安全的结合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率,我们一般所编写的程序都是异步的,但如果是服务器端的代码除外。
3.值:
HashMap可以让你将空值作为一个表的条目的key或value
Hashtable是不能放入空值(null)的
ArrayList和Vector的区别:
ArrayList与Vector都是java的集合类,都是用来存放java对象,这是他们的相同点,
区别:
1.同步性:
Vector是同步的,这个类的一些方法保证了Vector中的对象的线程安全的,而ArrayList则是异步的,因此ArrayList中的对象并不 是线程安全的,因为同步要求会影响执行的效率,所以你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必 要的性能开销。
2.数据增长:
从内部实现的机制来讲,ArrayList和Vector都是使用数组(Array)来控制集合中的对象,当你向两种类型中增加元素的时候,如果元素的数目超过了内部数组目前的长度他们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的50%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大,所以如果你要在集合中保存大量的数据,那么使用Vector有一些优势,因为你可以通过设置集合的初始大小来避免不必要的资源开销。
总结:
1)如果要求线程安全,使用Vector,Hashtable
2)如果不要求线程安全,使用ArrayList,LinkedList,HashMap
3)如果要求键值对,则使用HashMap,Hashtable
4)如果数据量很大,又要求线程安全考虑Vector
1.ArrayList: 元素单个,效率高,多用于查询
2.Vector: 元素单个,线程安全,多用于查询
3.LinkedList:元素单个,多用于插入和删除
4.HashMap: 元素成对,元素可为空
5.HashTable: 元素成对,线程安全,元素不可为空
ArrayList
底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。
而在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置)。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。
双向循环链表的查询效率低但是增删效率高。
ArrayList和LinkedList在用法上没有区别,但是在功能上还是有区别的。
LinkedList
经常用在增删操作较多而查询操作很少的情况下:队列和堆栈。
队列:先进先出的数据结构。
栈:后进先出的数据结构。
注意:使用栈的时候一定不能提供方法让不是最后一个元素的元素获得出栈的机会。
Vector
(与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。)
结论:在考虑并发的情况下用Vector(保证线程的安全)。
在不考虑并发的情况下用ArrayList(不能保证线程的安全)。
面试经验(知识点):
java.util.stack(stack即为堆栈)的父类为Vector。可是stack的父类是最不应该为Vector的。因为Vector的底层是数组,且Vector有get方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。
对于堆栈和队列只能用push类和get类。
Stack类以后不要轻易使用。
实现栈一定要用LinkedList。
(在JAVA1.5中,collection有queue来实现队列。)
Set-HashSet实现类:
遍历一个Set的方法只有一个:迭代器(interator)。
HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复。
在Object中除了有finalize(),toString(),equals(),还有hashCode()。
HashSet底层用的也是数组。
当向数组中利用add(Object o)添加对象的时候,系统先找对象的hashCode:
int hc=o.hashCode(); 返回的hashCode为整数值。
Int I=hc%n;(n为数组的长度),取得余数后,利用余数向数组中相应的位置添加数据,以n为6为例,如果I=0则放在数组a[0]位置,如果I=1,则 放在数组a[1]位置。如果equals()返回的值为true,则说明数据重复。如果equals()返回的值为false,则再找其他的位置进行比 较。这样的机制就导致两个相同的对象有可能重复地添加到数组中,因为他们的hashCode不同。
如果我们能够使两个相同的对象具有相同hashcode,才能在equals()返回为真。
在实例中,定义student对象时覆盖它的hashcode。
因为String类是自动覆盖的,所以当比较String类的对象的时候,就不会出现有两个相同的string对象的情况。
现在,在大部分的JDK中,都已经要求覆盖了hashCode。
结论:如将自定义类用hashSet来添加对象,一定要覆盖hashcode()和equals(),覆盖的原则是保证当两个对象hashcode返回相同的整数,而且equals()返回值为True。
如果偷懒,没有设定equals(),就会造成返回hashCode虽然结果相同,但在程序执行的过程中会多次地调用equals(),从而影响程序执行的效率。
上网查吧,资料太多了。
学java能做什么工作
5、交易系统 第三方交易系统,金融服务行业的一大部分,同样也是使用Java编写的。例如像Murex这种受欢迎的交易系统,运用于与许多的银行前端链接,同样也是用Java编写的。6、J2MEApps 虽然IOS和Android的到来几乎扼杀了J2ME的市场,但是仍然有很多的低端诺基亚和三星手机在使用着J2ME。曾经有段时间大部分的游戏...
ava是什么意思呀..
2. 特定领域的术语: 在不同的行业或领域中,AVA可能有特定的含义。例如,在军事或航空领域,AVA可能代表某种装备、技术或操作的代号。3. 代号或缩写: 在某些情况下,AVA可能仅仅是某个品牌、公司或组织的代号或缩写。这样的用法常见于商业或组织中,用以简化名称或标识身份。由于“AVA”这个词没有...
一个java项目中的软件环境、硬件环境、开发工具具体指的什么啊
Java应用编程接口已经从1.1x版发展到1.2版。现常用的Java平台基于Java1.7,最近版本为Java1.8。Java分为三个体系JavaSE(Java2 Platform Standard Edition,java平台标准版),JavaEE(Java 2 Platform,Enterprise Edition,java平台企业版),JavaME(Java 2 Platform Micro Edition,java平台微型版)。ava...
ava中M4A1怎样改更好用
CF我的M4无敌 AVA的M4基本没法用的 建议用狙或冲锋 我从内测一就玩了,顶级改装的M4在AVA简直里是垃圾 还不如RPG···近距离老折在冲锋枪下··远距离不用说 MP5冲锋近距离很好用 加瞄准镜就行了 按V加消音 挺好 狙就是那个绿的 基本一枪 跳狙比CF容易 如果卖了M4,就不要该太多了 多打...
我觉得java最大的优点是不是java很稳定,不会出现大的更新?
稳定不稳定不是看是否有大的更新,java的如果要说,最大的优点就是用的人最多,这个下面具体说 为什么你感觉Java更新有很少的变化呢?因为java的更新,有一个原则就是向下兼容,也就是你在jdk1.4上写的代码,跑在jdk1.7上一点问题没有。java入门其实不难,你如果会.net,一两天就可以学会基本使用...
战地之王,AVA 我为什么越玩越退步了?根本就打不死人
你的枪法不行,要好好的练。枪法不好很会被人打惨的。枪法也就是考你的反应力所以注意力一定要集中,遇敌开第一枪很重要,打中敌人后马上压枪:AK点射,M4可连射:.第一枪没打中你就别和他硬拼了,利用好身边掩护物,切记心中淡定,.
穿越火线里面的炸房是BUG来的吗?还有AVA里面的飞刀,这些是不是BUG来的...
先说一下最常用的卡管吧,先走到管口前在向里冲,在到管口时候马上按 蹲(Ctrl)然后马上松开 蹲(Ctrl),最好就是在马上冲到管口的时候轻点一下 蹲(Ctrl),如果 卡好了你就能在管中站着走了,还能看见管外面的地方。卡管的方法不只是这一种,不过我都试过后还是认为这种方法最好卡。刚开始会感到很不好卡,...
战地之王AVA狙击的问题,
和步兵的44有一拼,少了11发子弹也不可惜,射速50左右,不算高,不过子弹也用的慢,还是看水平,适合冲锋阴人,侦察兵武器。指挥官是你所在队伍中军衔最高的人,在屏幕右下角有个望远镜的图标,打开望远镜见到敌人后恩左键会标记敌人位置,瞄向建筑物则是指出首先要攻占的目标。参考资料:经验 ...
AVA里的FTP是什么?
在 Internet 上有一些网站,它们依照 FTP 协议提供服务,让网友们进行文件的存取,这些网站就是 FTP 服务器。网上的用户要连上 FTP 服务器,就要用到 FPT 的客户端软件,通常 Windows 都有“ftp”命令,这实际就是一个命令行的 FTP 客户程序,另外常用的 FTP 客户程序还有 CuteFTP、Ws_FTP、FTP ...
Web自动化测试有什么常用的工具?
通过在并行进程中同时运行测试,让测试更快地结束。2、AVA 号称“未来的测试运行器”,利用 Java 在 Node.js 里使得 IO 可以并行的优点,让你的测试可以并发执行,这对于 IO 繁重的测试特别有用。另外,测试文件可以在不同的进程里并行运行,让每一个测试文件可以获得更好的性能和独立的环境。测试...
皮琛菲科: 常用的集合类有一下几种: List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类 Map结构的集合类:HashMap类,Hashtable类 Set结构的集合类:HashSet类,TreeSet类 Queue结构的集合:Queue接口 HashMap和Hashtable的区...
集宁区13797957001: 有没有谁知道JAVA中的一些集合类的区别,我看怎么用发都差不多,那在什么地方要用什么集合类呢! - ?
皮琛菲科: JAVA中所有的集合全都实现了iterator()方法,也就是说你用集合就可以用迭代器遍历集合.主要跟你说这么几大类常用的,其他的比较不常用的甚至是过时的东西我在这里就不说了.一、Set 这个集合存放的是无序的、可变长度的、不重复...
集宁区13797957001: JAVA的集合框架中有那些类,他们都有那些区别?
皮琛菲科: 区别详解,没法详解,数据结构就够研究几个月的,不过要是把目标放在会用上,就容易多了,也无需了解底层,看看API文档,知道什么方法是干什么的会用就行了. 集合类巨多无比,其实常用的也就这么几个,其他的都不用太看,你就看看...
集宁区13797957001: JAVA中的几个集合的区别在哪??
皮琛菲科: 都说完了, 呵呵 提醒一下,如果使用Set的时候, 首选HashSet啊,(默认首选~)
集宁区13797957001: Java中Set、List、Map集合类(接口)的特点及区别.分别有哪些常用实现类. - ?
皮琛菲科: Java集合框架位于java.util包中 set 它的对象不按特定方式排序,只是简单的把对象加入集合中 List 采用线性列表的存储方式,长度可动态改变 实现类 ArrayList 和 LinkedList Map 采用键-值对的存储方式,长度可动态改变 实现类 HashMap 可以参考 http://blog.csdn.net/xczheng/archive/2009/02/25/3936474.aspx
集宁区13797957001: java中list和map的区别 - ?
皮琛菲科: 1、Java中的集合包括三大类,它们是Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类.Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap. ...
集宁区13797957001: JAVA的集合类API之间的区别,比如:Arraylist,Vector的区别,HashSet和HashMap的区别?
皮琛菲科: 这些都是java提供的Library, 是不同类型的数据结构. 具体的你可以去google搜搜"java api"找到他们的定义和提供的各种方法 链表是数据结构中的一种. 简单的说, 链表每一个单元是由一个object(可以是int, string, float, 或者甚至就是个object型的变量)和一个pointer(你理解成指针)构成的, 并且这个指针指向下一个单元(听起来是不是有点复杂?) linkedlist的好处就是不像array那么死板, 可以随时添加,删除一个单元, 在任何位置, 只要改变指针指向的单元就可以了, 具体的你可以查查数据结构的书, 书里肯定提到过
集宁区13797957001: Java中集合类的区别,请高手详解 - ?
皮琛菲科: ArrayList 实现List接口 ,随着向 ArrayList 中不断添加元素,其容量也自动增长 Vector向量 不过我是不太喜欢这个类 HashMap实现Map接口--可以说内存就是一个HashMap HashTable实现一个哈希表,该哈希表将键映射到相应的值 Set一个不包...
集宁区13797957001: 在Java.util包中的LinkedList类、ArrayList类、HashMap类、Vector类的区别和它们都什么时候用?? - ?
皮琛菲科: 1、在数据结构上不同.LinkedList为链表,ArrayList为数组列表,Vector为向量,HashMap为通过Hash值索引的图.在具体实现上有不同.2、从数据接口上看,LinkedList,ArrayList,Vector都实现了List接口,所以功能上基本相同,都可通过index数值定位数据.HashMap实现的是Map接口,通过指定的键的Hash值来定位数据,数据较多时,速度比较快.
集宁区13797957001: java集合类框架中类的组织结构,并说明它们之间的联系与区别. - ?
皮琛菲科: 结构图一楼给出来了,联系:list是可重复的有顺序的;一一对应的.区别:1. ArrayList是用动态数组实现的,有数组随机访问的优点,但插入和删除操作过多时效率低;LinkedList是用双向链表实现的,插入和删除操作效率高,但随机访问数据不如ArrayList速度快.2. HashSet是用散列实现的,TreeSet是用红黑树(基于二叉平衡树的变种)实现的,TreeSet是有序的(这可能与数学中纯粹的集合概念不一致,但似乎这世上本就没有纯粹的东西吧),所以放入TreeSet中的对象必须是可比较的,即实现Compareble接口.3. HashMap和TreeMap,与HashSet、TreeSet类似.