「java集合下得组件」java集合里面放集合

博主:adminadmin 2022-12-14 16:12:08 74

今天给各位分享java集合下得组件的知识,其中也会对java集合里面放集合进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java怎么集合分类?

Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。

List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。

Map是以键值对存放!

现在主要用ArrayList和HashMap!

collection接口下由set,list两大集合实现,set又有HashSet,TreeSet实现,List又由ArrayList,LinkedList实现;另一Map接口由HashMap,TreeMap实现。

Java API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下:

Collection--List--Vector

Collection--List--ArrayList

Collection--List--LinkedList

Collection--Set--HashSet

Collection--Set--HashSet--LinkedHashSet

Collection--Set--SortedSet--TreeSet。

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的容器组件?它有什麽特点?JAVA提供了那些容器组件?

JAVA容器库(container)包含两大组件:Collection和Map.

Collection是一组相互独立的对象的集合.Map是一组KEY--VALUE对应的对象集合.

Collection中又分为两类:一类是List;另一类是Set.Set下还有SortedSet,而Map下有SortedMap.

其下有很多接口和方法,具体的用法请参考官方文档和有关教程,这个不难。

这些接口和方法是构成整个JAVA容器库的最顶层的元素,学习了这些我至少可以使用容器编写一般化的 的程序.这些方法的学习总体来说是比较简单的,但如果要深究其原理也是颇具挑战的,就单单说迭代器的实现,实现机理,也是值得探讨的。抛开这些不说,在类库的设计层面上所也值得我们去研究。

以上为引用。

JAVA的集合框架中有那些类,他们都有那些区别

区别详解,没法详解,数据结构就够研究几个月的,不过要是把目标放在会用上,就容易多了,也无需了解底层,看看API文档,知道什么方法是干什么的会用就行了。

集合类巨多无比,其实常用的也就这么几个,其他的都不用太看,你就看看:ArrayList、LinkedList、HashMap、TreeMap、HashSet 就行了,我理解也有限,简单说一下这几个:

Collection下面有List和Set,List有ArrayList、LinkedList,ArrayList底层以Object类型数组实现,特点是查找很快,增加或删除操作很慢,这是由于数组的特点决定的,查找的时候因为有下标,所以你查第一个和查第1000个速度是一样的,直接就定位过去了,但是删除或者增加内容时,假如说一个ArrayList里面有1000个元素,现在把第一个元素删掉,那就出问题了,从第2个一直到第1000个元素都要

往前移动一个位置,这种移动是非常耗时而且效率是极其低下的。

LinkedList底层是以双向循环链表实现的,特点是查找很慢,但是增加和删除操作很快,双向循环链表里面所有元素都是一个一个连在一起的,查找第1000个,就要从第1个开始找到第2个,然后第3个....

但是删除的时候,直接吧元素就删了,前后的两个元素之间在连起来,ok 了。

TreeMap,特点是按照key的升序保存键值对,因此插入的时候效率理论上稍慢写。

HashMap、HashSet,HashSet底层以HashMap实现,HashMap底层以数组实现,当向集合HashSet中使用add方法增加元素的时候,其实会向HashMap中增加一行(key-value),这个key就是增加到Set中的对象,value是一个Object对象,首先调用key的hashCode方法返回一个HashCode值,注意这并不是真正的物理地址,通过将这个值进行散列运算,得到一个int型的数,然后利用此数和数组的长度计算出一个数组的下标值,看看这个位置上有没有一个对象,如果没有直接增加进去一个Entry对象,如果有,那么接着将准备增加到集合中的key与该位置上的对象的key进行equals方法比较,如果该equals方法返回true,说明两个key的内容相同,会用新的value将旧的value替换掉,put方法会返回这个被替换掉的value,如果equals方法返回false,会调用当前位置上存在的那个Entry对象的next属性,寻找下一个Entry对象根这个Entry对象的key再进行equals比较.....

Vector和HashTable两个已经过时了,内部public方法都是同步的,所以效率极其低下,淘汰了,不过面试老考,郁闷。

简叙java的集合框架,常见集合的特点有哪些

集合主要有Collection和Map接口。

List特点:元素有放入顺序,元素可重复

Map特点:元素按键值对存储,无放入顺序

Set特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)

List接口有三个实现类:LinkedList,ArrayList,Vector

LinkedList:底层基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢

ArrayList和Vector的区别:ArrayList是非线程安全的,效率高;Vector是基于线程安全的,效率低

Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet

SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)

Query接口有一个实现类:LinkList

Map接口有三个实现类:HashMap,HashTable,LinkeHashMap

HashMap非线程安全,高效,支持null;HashTable线程安全,低效,不支持null

SortedMap有一个实现类:TreeMap

其实最主要的是,list是用来处理序列的,而set是用来处理集的。Map是知道的,存储的是键值对

set

一般无序不重复.map

kv

结构

list

有序

有用请采纳,谢谢

java集合下得组件的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java集合里面放集合、java集合下得组件的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-14,除非注明,否则均为首码项目网原创文章,转载请注明出处。