本文目录一览:
求大神,java的集合框架是什么意思?
Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。
Java 2集合框架图
集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。
实现类:8个实现类(实线表示),对接口的具体实现。
在很大程度上,一旦您理解了接口,您就理解了框架。虽然您总要创建接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上;因此,允许您更改基本的数据结构而不必改变其它代码。
· Collection 接口是一组允许重复的对象。
· Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。
· List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。
· Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。
· 容器中的元素类型都为Object。从容器取得元素时,必须把它转换成原来的类型。
Java 2简化集合框架图
集合接口
1.Collection 接口
用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。
(1) 单元素添加、删除操作:
boolean add(Object o):将对象添加给集合
boolean remove(Object o): 如果集合中有与o相匹配的对象,则删除对象o
(2) 查询操作:
int size() :返回当前集合中元素的数量
boolean isEmpty() :判断集合中是否有任何元素
boolean contains(Object o) :查找集合中是否含有对象o
Iterator iterator() :返回一个迭代器,用来访问集合中的各个元素
(3) 组操作 :作用于元素组或整个集合
boolean containsAll(Collection c): 查找集合中是否含有集合c 中所有元素
boolean addAll(Collection c) : 将集合c 中所有元素添加给该集合
void clear(): 删除集合中所有元素
void removeAll(Collection c) : 从集合中删除集合c 中的所有元素
void retainAll(Collection c) : 从集合中删除集合c 中不包含的元素
(4) Collection转换为Object数组 :
Object[] toArray() :返回一个内含集合所有元素的array
Object[] toArray(Object[] a) :返回一个内含集合所有元素的array。运行期返回的array和参数a的型别相同,需要转换为正确型别。
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集合类框架中类的组织结构,并说明它们之间的联系与区别。
结构图一楼给出来了,
联系:list是可重复的有顺序的;set是不重复的无序的;map中的key是不重复的,value是和key一一对应的。
区别:
1. ArrayList是用动态数组实现的,有数组随机访问的优点,但插入和删除操作过多时效率低;LinkedList是用双向链表实现的,插入和删除操作效率高,但随机访问数据不如ArrayList速度快。
2. HashSet是用散列实现的,TreeSet是用红黑树(基于二叉平衡树的变种)实现的,
TreeSet是有序的(这可能与数学中纯粹的集合概念不一致,但似乎这世上本就没有纯粹的东西吧),所以放入TreeSet中的对象必须是可比较的,即实现Compareble接口。
3. HashMap和TreeMap,与HashSet、TreeSet类似。
JAVA集合框架的总结
1.数组把对象和数字形式的下标联系起来。它持有的是类型确定的对象,这样提取对象的时候就不用再作类型传递了。它可以是多维的,也可以持有primitive。但是创建之后它的容量不能改了。
2.Collection持有单个元素,而Map持有相关联的pair。
3.和数组一样,List也把数字下标同对象联系起来,你可以把数组和List想成有序的容器。List会随元素的增加自动调整容量。但是List只能持有Objectreference,所以不能存放primitive,而且把Object提取出来之后,还要做类型传递。
4.如果要做很多随机访问,那么请用ArrayList,但是如果要再List的中间做很多插入和删除的话,就应该用LinkedList了。
5.LinkedList能提供队列,双向队列和栈的功能。
6.Map提供的不是对象与数组的关联,而是对象和对象的关联。
HashMap看重的是访问速度,而TreeMap看重键的顺序,因而它不如HashMap那么快。而LinkedHashMap则保持对象插入的顺序,但是也可以用LRU算法为它重新排序。
7.Set只接受不重复的对象。HashSet提供了最快的查询速度。而TreeSet则保持元素有序。LinkedHashSet保持元素的插入顺序。
8.没必要再在新代码里使用旧类库留下来的Vector,Hashtable和Stack了。
容器类库是你每天都会用到的工具,它能使程序更简洁,更强大并且更高效。
随着Java的进一步完善,它的功能和易用性也得到提高,我有理由相信Java在计算机语言中所占的位置也会更加牢固,让喜爱Java的人更加喜爱它。祝愿Java一路顺风!