2024年10月java集合区别(JAVA里面set,map,list的区别是什么(尽量详细))

 更新时间:2024-10-12

  ⑴java集合区别(JAVA里面set,map,list的区别是什么(尽量详细

  ⑵JAVA里面set,map,list的区别是什么(尽量详细

  ⑶java集合的主要分为三种类型:

  ⑷要深入理解集合首先要了解下我们熟悉的数组:

  ⑸数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型,而JAVA集合可以存储和操作数目不固定的一组数据。所有的JAVA集合都位于java.util包中!JAVA集合只能存放引用类型的的数据,不能存放基本数据类型。

  ⑹简单说下集合和数组的区别:(参考文章:《ThinkingInAlgorithm》.数据结构之数组)

  ⑺Java所有“存储及随机访问一连串对象”的做法,array是最有效率的一种。

  ⑻效率高,但容量固定且无法动态改变。array还有一个缺点是,无法判断其中实际存有多少元素,length只是告诉我们array的容量。

  ⑼Java中有一个Arrays类,专门用来操作array。arrays中拥有一组static函数,equals():比较两个array是否相等。array拥有相同元素个数,且所有对应元素两两相等。fill():将值填入array中。sort():用来对array进行排序。binarySearch():在排好序的array中寻找元素。System.arraycopy():array的复制。

  ⑽若撰写程序时不知道究竟需要多少对象,需要在空间不足时自动扩增容量,则需要使用容器类库,array不适用。所以就要用到集合。

  ⑾那我们开始讨论java中的集合。

  ⑿Collection:List、SetMap:HashMap、HashTable

  ⒀java里的数组和集合的区别是什么

  ⒁数组是JAVA语言内置的数据类型,它是一个线性的序列,所以它可以快速的访问其他的元素。但是速度是要有代价的,当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里是不能改变的。还有一点,JAVA里面的数组是会做边界检查的,所以当你越界访问时,会抛出RuntimeException,所以不用担心在C或C++因为不做边界检查而出现的问题了,当然边界检查是以牺牲效率为代价的。数组与其它容器类的区别体现在三个方面:效率、类型识别和可以持有primitives。JAVA里面提供的其他容器还包括List,Set和Map。他们处理对象的时候就好像这些这些对象都没有自己的类型一样,容器将它所含的元素都看成是JAVA中所有类的根类Object类型的,这样我们只需创建一种容器,就能把所有的类型的对象全部放进去。但是当取出的时候,那就需要我们自己进行类型转换了,不过在JAVATiger版里面新引入了“泛型”的概念,结合容器类一起使用就可以解决类型转换的问题,关于“泛型”这就不详细讲解了。从上面的角度来看,这种做法很不错,但是就是苦了primitives,如果是常量的话,可以把primitive转换成wrapper类然后放进容器里面,如果是变量的话,那就只能放在你自己的类里了。与其他容器类相比,数组会在编译的时候作类型检查,从而防止你插入错误类型的对象,或者在提取对象的时候把对象的类型给搞错了,JAVA在编译和运行的时候都能阻止你将一个不恰当的消息传给对象。至于效率,数组无疑是要高于其他容器类的,因为有些容器类的实现就是基于数组的,比如ArrayList。不论从类型检查还是效率的角度来考虑,我们首选数组来作为容器都是没错的,但是数组的缺点就是功能太弱了,所以才会有容器类的出现。要多说几句的就是,java.util包里面有一个Arrays类,它包括了一组可以用于数组的static的工具方法,其中最基本的是四个方法:用来比较两个数组是否相等的equals();用来填充数组的fill();用来对数组进行排序的sort();以及用于在一个已经排序的数组中查找元素的binarySearch()。所有这些方法都对primitives和Object进行了重载。此外还有一个asList()方法,它接受一个数组,然后把它转成一个List容器。JAVA标准类库还提供了一个System.arraycopy()的静态方法,它能以较快的速度拷贝数组,对primitive和Object都进行了重载,但是注意当对Object数组进行拷贝时,进行的是浅拷贝(shallowcopy)。

  ⒂Java五个最常用的集合类之间的区别和联系

  ⒃常用的集合类有一下几种:List结构的集合类:ArrayList类,LinkedList类,Vector类,Stack类Map结构的集合类:HashMap类,Hashtable类Set结构的集合类:HashSet类,TreeSet类Queue结构的集合:Queue接口HashMap和Hashtable的区别:HashMap和Hashtable都是java的集合类,都可以用来存放java对象,这是他们的相同点以下是他们的区别:.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是java.引进的Map接口的一个现实。.同步性:Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap则是异步的,因此HashMap中的对象并不是线程安全的,因为同步的要求会影响执行的效率,所以如果你不需要线程安全的结合那么使用HashMap是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销,从而提高效率,我们一般所编写的程序都是异步的,但如果是服务器端的代码除外。.值:HashMap可以让你将空值作为一个表的条目的key或valueHashtable是不能放入空值(null的ArrayList和Vector的区别:ArrayList与Vector都是java的集合类,都是用来存放java对象,这是他们的相同点,区别:.同步性:Vector是同步的,这个类的一些方法保证了Vector中的对象的线程安全的,而ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的,因为同步要求会影响执行的效率,所以你不需要线程安全的集合那么使用ArrayList是一个很好的选择,这样可以避免由于同步带来的不必要的性能开销。.数据增长:从内部实现的机制来讲,ArrayList和Vector都是使用数组(Array来控制集合中的对象,当你向两种类型中增加元素的时候,如果元素的数目超过了内部数组目前的长度他们都需要扩展内部数组的长度,Vector缺省情况下自动增长原来一倍的数组长度,ArrayList是原来的%,所以最后你获得的这个集合所占的空间总是比你实际需要的要大,所以如果你要在集合中保存大量的数据,那么使用Vector有一些优势,因为你可以通过设置集合的初始大小来避免不必要的资源开销。总结:如果要求线程安全,使用Vector,Hashtable如果不要求线程安全,使用ArrayList,LinkedList,HashMap)如果要求键值对,则使用HashMap,Hashtable如果数据量很大,又要求线程安全考虑Vector.ArrayList:元素单个,效率高,多用于查询.Vector:元素单个,线程安全,多用于查询.LinkedList:元素单个,多用于插入和删除.HashMap:元素成对,元素可为空.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。(在JAVA.中,collection有queue来实现队列。Set-HashSet实现类:遍历一个Set的方法只有一个:迭代器(interator。HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同,而且元素不可重复。在Object中除了有finalize(),toString(),equals(),还有hashCode()。HashSet底层用的也是数组。当向数组中利用add(Objecto)添加对象的时候,系统先找对象的hashCode:inthc=o.hashCode();返回的hashCode为整数值。IntI=hc%n;(n为数组的长度,取得余数后,利用余数向数组中相应的位置添加数据,以n为为例,如果I=则放在数组a位置。如果equals()返回的值为true,则说明数据重复。如果equals()返回的值为false,则再找其他的位置进行比较。这样的机制就导致两个相同的对象有可能重复地添加到数组中,因为他们的hashCode不同。如果我们能够使两个相同的对象具有相同hashcode,才能在equals()返回为真。在实例中,定义student对象时覆盖它的hashcode。因为String类是自动覆盖的,所以当比较String类的对象的时候,就不会出现有两个相同的string对象的情况。现在,在大部分的JDK中,都已经要求覆盖了hashCode。结论:如将自定义类用hashSet来添加对象,一定要覆盖hashcode()和equals(),覆盖的原则是保证当两个对象hashcode返回相同的整数,而且equals()返回值为True。如果偷懒,没有设定equals(),就会造成返回hashCode虽然结果相同,但在程序执行的过程中会多次地调用equals(),从而影响程序执行的效率。

  ⒄JAVA中几种集合(List、Set和Map)的区别

  ⒅Set对每个对象只接受一次,并使用自己内部的排序方法(通常,你只关心某个元素是否属于Set,而不关心它的顺序--否则应该使用List)。Map同样对每个元素保存一份,但这是基于“键“的,Map也有内置的排序,因而不关心元素添加的顺序。如果添加元素的顺序对你很重要,应该使用LinkedHashSet或者LinkedHashMap.总结:List有顺序有重复没有排序,set无重复有排序,map的key也和set一样。如果想跟List一样需要有插入元素的顺序,请使用LinkedHashSet或者LinkedHashMap。List的功能方法实际上有两种List:一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是具有一套更通用的方法。List:次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推荐LinkedList使用。)一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和移除元素。ArrayList:由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和移除元素。因为那比LinkedList开销要大很多。LinkedList:对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。(使用ArrayList代替。)还具有下列方法:addFirst(),addLast(),getFirst(),getLast(),removeFirst()和removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。Set的功能方法Set:存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。HashSet:为快速查找设计的Set。存入HashSet的对象必须定义hashCode()。TreeSet:保存次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。LinkedHashSet:具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。Map的功能方法方法put(Objectkey,Objectvalue)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Objectkey)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。标准的Java类库中包含了几种不同的Map:HashMap,TreeMap,LinkedHashMap,WeakHashMap,IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。执行效率是Map的一个大问题。看看get()要做哪些事,就会明白为什么在ArrayList中搜索“键”是相当慢的。而这正是HashMap提高速度的地方。HashMap使用了特殊的值,称为“散列码”(hashcode),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法。HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显著提高性能。Map:维护“键值对”的关联性,使你可以通过“键”查找“值”HashMap:Map基于散列表的实现。插入和查询“键值对”的开销是固定的。可以通过构造器设置容量capacity和负载因子loadfactor,以调整容器的性能。LinkedHashMap:类似于HashMap,但是迭代遍历它时,取得“键值对”的顺序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一点。而在迭代访问时发而更快,因为它使用链表维护内部次序。TreeMap:基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由parabel或parator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。WeakHashMao:弱键(weakkey)Map,Map中使用的对象也被允许释放:这是为解决特殊问题设计的。如果没有map之外的引用指向某个“键”,则此“键”可以被垃圾收集器回收。IdentifyHashMap:使用==代替equals()对“键”作比较的hashmap。专为解决特殊问题而设计。

  ⒆在Java中,什么是集合类,跟普通类有什么区别

  ⒇简单的说,集合类有list列,set集和map映射三大类!xdxaxdxaSet(集):集合中的对象无排列顺序,并且没有重复的对象.xdxaxdxaList(队列):集合中的对象按照索引的顺序排列,可以有重复的对象。xdxaxdxaMap(映射):集合中的每一个元素都是一对一对的,包括一个key对象,一个Value对象(一个Key指向一个Value).集合中没有重复的key对象,但是vaulue对象可以重复.xdxa集合类是进行集合操作的。

  ⒈JAVA中的几个集合的区别在哪

  ⒉listmapset三个都是接口Map映射表,一个key只能对应一个value(它的反命题,一个value只对应一个key不成立)最常用的有:MapL---HashMap(key可以null)L---HashTable(key不能为null)L---Properties(适合读取.properties格式的文件L---SortedMap(interface根据Key排序)L---TreeMap(用二叉树实现key排序)List和Set都是线性的,主要区别是List里面存放的内容可以重复,而Set同一对象只保留唯一的一个。因此,Map里面,提取Key集合的返回类型是Set,而提取Value集合的类型是Collection(List/Set)的父类型。常用的有ListL---LinkedList(链表L---ArrayList(动态数组,所有方法不同步L---Vector(动态数组,所有方法同步L---Stack(可以实现LIFO的栈

  ⒊java常见的集合、接口、类的区别和联系

  ⒋Java中的Set,List,Map的区别

  ⒌对JAVA的集合的理解是想对于数组

  ⒍数组是大小固定的并且同一个数组只能存放类型一样的数据(基本类型/引用类型

  ⒎JAVA集合可以存储和操作数目不固定的一组数据

  ⒏所有的JAVA集合都位于javautil包中!

  ⒐JAVA集合只能存放引用类型的的数据不能存放基本数据类型

  ⒑JAVA集合主要分为三种类型

  ⒒Collection接口

  ⒓Collection是最基本的集合接口声明了适用于JAVA集合(只包括Set和List的通用方法

  ⒔Set和List都继承了ConllectionMap没有

  ⒕Collection接口的方法

  ⒖booleanadd(Objecto)??:向集合中加入一个对象的引用

  ⒗voidclear()???????????????????????:删除集合中所有的对象即不再持有这些对象的引用

  ⒘booleanisEmpty()??????????:判断集合是否为空

  ⒙booleancontains(Objecto):判断集合中是否持有特定对象的引用

  ⒚Iterartoriterator()?????????????:返回一个Iterator对象可以用来遍历集合中的元素

  ⒛booleanremove(Objecto):从集合中删除一个对象的引用

  intsize()??????????????????????????????:返回集合中元素的数目

  ObjecttoArray()????????????????:返回一个数组该数组中包括集合中的所有元素

  关于Iterator()和toArray()方法都用于集合的所有的元素前者返回一个Iterator对象后者返回一个

  包含集合中所有元素的数组

  Iterator接口声明了如下方法

  hasNext():判断集合中元素是否遍历完毕如果没有就返回true

  next()??????:返回下一个元素

  remove():从集合中删除上一个有next()方法返回的元素

  Set是最简单的一种集合集合中的对象不按特定的方式排序并且没有重复对象

  Set接口主要实现了两个实现类

  HashSet:HashSet类按照哈希算法来存取集合中的对象存取速度比较快

  TreeSet??:TreeSet类实现了SortedSet接口能够对集合中的对象进行排序

  存放的是对象的引用没有重复对象

  Setset=newHashSet();

  Strings=newString(hello);

  Strings=s;

  Strings=newString(world);

  setadd(s);

  setadd(s);

  setadd(s);

  Systemoutprintln(setsize());//打印集合中对象的数目为

  Set的add()方法是如何判断对象是否已经存放在集合中?

  booleanisExists=false;

  Iteratoriterator=erator();

  while(ithasNext())??????????{

  StringoldStr=itnext();

  if(newStrequals(oldStr)){

  isExists=true;

  List的特征是其元素以线性方式存储集合中可以存放重复对象

  List接口主要实现类包括

  ArrayList():代表长度可以改变得数组可以对元素进行随机的访问向ArrayList()中插入与

  LinkedList():在实现中采用链表数据结构插入和删除速度快访问速度慢

  对于List的随机访问来说就是只随机来检索位于特定位置的元素

  List的get(intindex)方法放回集合中由参数index指定的索引位置的对象下标从开始

  最基本的两种检索集合中的所有对象的方法

  :用for循环和get()方法

  for(inti=;i《listsize();i++){

  Systemoutprintln(listget(i));

  :使用迭代器(Iterator:

  Iteratorit=erator();

  while(ithashNext){

  Systemoutprintln(itnext);

  Map是一种把键对象和值对象映射的集合它的每一个元素都包含一对键对象和值对象

  Map没有继承于Collection接口

  从Map集合中检索元素时只要给出键对象就会返回对应的值对象

  Objectput(ObjectkeyObjectvalue):向集合中加入元素

  Objectremove(Objectkey):??删除与KEY相关的元素

  voidputAll(Mapt):??将来自特定映像的所有元素添加给该映像

  voidclear():从映像中删除所有映射

  Objectget(Objectkey):获得与关键字key相关的值

  Map集合中的键对象不允许重复也就说任意两个键对象通过equals()方法比较的结果都是false

  但是可以将任意多个键独享映射到同一个值对象上

  Conllections:集合实用类

  Conllections提供了供JAVA集合实用的静态方法

  JAVA集合的基本用法都归纳了上面这些是平常最常用的JAVA集合具体的其他的还要参考JDK帮助文档了呵呵关于Map的应用还有很多具体就是这个Conllections提供了很多List/Map实用的方法对平常开发非常有用

  booleancontainsKey(Objectkey):判断映像中是否存在关键字key

  booleancontainsValue(Objectvalue):判断映像中是否存在值value

  intsize():返回当前映像中映射的数量

  booleanisEmpty()判断映像中是否有任何映射

  List按对象进入的顺序保存对象不做排序或操作Set对每个对象只接受一次并使用自己内部的排序方法(通常你只关心某个元素是否属于Set而不关心它的顺序否则应该使用List)Map同样对每个元素保存一份但这是基于键的Map也有内置的排序因而不关心元素添加的顺序如果添加元素的顺序对你很重要应该使用LinkedHashSet或者LinkedHashMap

  实际上有两种List:一种是基本的ArrayList其优点在于随机访问元素另一种是更强大的LinkedList它并不是为快速随机访问设计的而是具有一套更通用的方法

  List:次序是List最重要的特点它保证维护元素特定的顺序List为Collection添加了许多方法使得能够向List中间插入与移除元素(这只推荐LinkedList使用)一个List可以生成ListIterator使用它可以从两个方向遍历List也可以从List中间插入和移除元素

  ArrayList:由数组实现的List允许对元素进行快速随机访问但是向List中间插入与移除元素的速度很慢ListIterator只应该用来由后向前遍历ArrayList而不是用来插入和移除元素因为那比LinkedList开销要大很多

  LinkedList:对顺序访问进行了优化向List中间插入与删除的开销并不大随机访问则相对较慢(使用ArrayList代替)还具有下列方法addFirst()addLast()getFirst()getLast()removeFirst()和removeLast()这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈队列和双向队列使用

  Set具有与Collection完全一样的接口因此没有任何额外的功能不像前面有两个不同的List实际上Set就是Collection只是行为不同(这是继承与多态思想的典型应用表现不同的行为)Set不保存重复的元素(至于如何判断元素相同则较为负责)

  Set:存入Set的每个元素都必须是唯一的因为Set不保存重复元素加入Set的元素必须定义equals()方法以确保对象的唯一性Set与Collection有完全一样的接口Set接口不保证维护元素的次序

  HashSet:为快速查找设计的Set存入HashSet的对象必须定义hashCode()

  TreeSet:保存次序的Set底层为树结构使用它可以从Set中提取有序的序列

  LinkedHashSet:具有HashSet的查询速度且内部使用链表维护元素的顺序(插入的次序)于是在使用迭代器遍历Set时结果会按元素插入的次序显示

  方法put(ObjectkeyObjectvalue)添加一个值(想要得东西)和与值相关联的键(key)(使用它来查找)方法get(Objectkey)返回与给定键相关联的值可以用containsKey()和containsValue()测试Map中是否包含某个键或值标准的Java类库中包含了几种不同的MapHashMapTreeMapLinkedHashMapWeakHashMapIdentityHashMap它们都有同样的基本接口Map但是行为效率排序策略保存对象的生命周期和判定键等价的策略等各不相同

  执行效率是Map的一个大问题看看get()要做哪些事就会明白为什么在ArrayList中搜索键是相当慢的而这正是HashMap提高速度的地方HashMap使用了特殊的值称为散列码(hashcode)来取代对键的缓慢搜索散列码是相对唯一用以代表对象的int值它是通过将该对象的某些信息进行转换而生成的所有Java对象都能产生散列码因为hashCode()是定义在基类Object中的方法

  HashMap就是使用对象的hashCode()进行快速查询的此方法能够显著提高性能

  Map:维护键值对的关联性使你可以通过键查找值

  HashMap:Map基于散列表的实现插入和查询键值对的开销是固定的可以通过构造器设置容量capacity和负载因子loadfactor以调整容器的性能

  LinkedHashMap:类似于HashMap但是迭代遍历它时取得键值对的顺序是其插入次序或者是最近最少使用(LRU)的次序只比HashMap慢一点而在迭代访问时发而更快因为它使用链表维护内部次序

  TreeMap:基于红黑树数据结构的实现查看键或键值对时它们会被排序(次序由parabel或parator决定)TreeMap的特点在于你得到的结果是经过排序的TreeMap是唯一的带有subMap()方法的Map它可以返回一个子树

  WeakHashMao:弱键(weakkey)MapMap中使用的对象也被允许释放:这是为解决特殊问题设计的如果没有map之外的引用指向某个键则此键可以被垃圾收集器回收lishixinzhi/Article/program/Java/ky//

  java中的集合有几种

  集合类是放在java.util.*;这个包里。集合类存放的都是对象的引用,而非对象本身,为了说起来方便些,我们称集合中的对象就是指集合中对象的引用(reference)。引用的概念大家不会忘了吧,在前边我们讲数据类型时讲的。集合类型主要有种:set(集、list(列表、map(映射)和Queue(队列。//队列为jdk中的加上的()Set集(set是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。我们知道数学上的集合也是Set这个,集合里面一定是没有重复的元素的。(List列表(List的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的Set是不同的。它是链表嘛,一条链肯定有顺序这个顺序就不一定了。(Map映射(Map,这个在java里不是地图的意思,其实地图也是映射哈。它里面的东西是键-值对(key-value出现的,键值对是什么呢?举个例子,比如我们查字典,用部首查字法。目录那个字就是键,这个字的解释就是值。键和值成对出现。这样说可以理解吧。这也是很常用的数据结构哦。(Queue在jdk.以前,通常的实现方式是使用java.util.List集合来模仿Queue。Queue的概念通过把对象添加(称为enqueuing的操作到List的尾部(即Queue的后部并通过从List的头部(即Queue的前部提取对象而从List中移除(称为dequeuing的操作来模拟。你需要执行先进先出的动作时可以直接使用Queue接口就可以了。这个东西,有时候功能还不太完善,需要有些子类继承它的特性。Set的子接口有TreeSet,SortedSet,List的有ArrayList等,Map里有HashMap,HashTable等,Queue里面有BlockingQueue等。我们来看看例子吧:实践:Set举例importjava.util.*;publilassSetExample{publicstaticvoidmain(Stringargs){Setset=newHashSet();//HashSet是Set的子接口set.add(“one“);set.add(“second“);set.add(“rd“);set.add(newInteger());set.add(newFloat(.F));set.add(“second“);set.add(newInteger());System.out.println(set);}}List举例:importjava.util.*;publilassListExample{publicstaticvoidmain(Stringargs){Listlist=newArrayList();list.add(“one“);list.add(“second“);list.add(“rd“);list.add(newInteger());list.add(newFloat(.F));list.add(“second“);list.add(newInteger());System.out.println(list);}}Map举例importjava.util.Map;importjava.util.HashMap;importjava.util.Iterator;importjava.io.FileReader;publilassMapExample{publicstaticvoidmain(Stringargs)throwsjava.io.FileNotFoundException{Mapword_count_map=newHashMap();FileReaderreader=newFileReader(args);Iteratorwords=newWordStreamIterator(reader);while(words.hasNext()){Stringword=(String)words.next();Stringword_lowercase=word.toLowerCase();Integerfrequency=(Integer)word_count_map.get(word_lowercase);if(frequency==null){frequency=newInteger();}else{intvalue=frequency.intValue();frequency=newInteger(value+);}word_count_map.put(word_lowercase,frequency);}System.out.println(word_count_map);}}Queue举例:importjava.io.IOException;importjava.io.PrintStream;importjava.util.LinkedList;importjava.util.Queue;publilassQueueTester{publicQueue《String》q;//发现了一个奇怪的语法,这个尖括号是泛型声明publicQueueTester(){q=newLinkedList《String》();}publicvoidtestFIFO(PrintStreamout)throwsIOException{q.add(“First“);q.add(“Second“);q.add(“Third“);Objecto;while((o=q.poll())!=null){out.println(o);}}publicstaticvoidmain(Stringargs){QueueTestertester=newQueueTester();try{tester.testFIFO(System.out);}catch(IOExceptione){e.printStackTrace();}}}

  Java集合中List和Map区别

  一个是存储单列数据的集合,,另外一个是存储键和值这样的双列数的集合,List中存储的数据是有顺序的,并且允许重复。。。Map中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的。。。List继承Collection接口,,Map不继承Collection接口。

您可能感兴趣的文章:

相关文章