java集合类的学习及详解

记录一下集合的内容,以便需要查看的时候不需要翻开书本;

   集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map,这两种集合的特点具体如下。
. Collection: 单列集合类的根接口,用于存储一 系列符合某种规则的元素,它有两个重要的子接口,分别是List和Set。其中,List 的特点是元素有序、元素可重复。Set的特点是元素无序并且不可重复。List 接口的主要实现类有ArrayList和LinkedList,Set接口的主要实现类有HashSet和TreeSet.
. Map:双列集合类的根接口,用于存储具有键(Key)、值(Value)映射关系的元素,每个元素都包含对键值,在使用Map集合时可以通过指定的Key找到对应的Value,例如根据-个学生 的学号就可以找到对应的学生。Map接口的主要实现类有HashMap和TreeMap

下面来用一张图描述整个集合类的继承关系

其中虚线的代表接口,实线的是具体的实现类

List:

List接口继承自Collection接口,特点是集合中允许出现重复的元素,所有元素是以一中线性的方式进行存储的,可以通过索引来访问集合中的指定元素,另外的一个特点是元素是有序的,即元素的存入顺序和取出顺序的一致;

 

ArrayList:

ArrayList是List的一个实现类,继承List的所有特点,在ArrayList的内部封装了一个长度可变的数组对象,当存人的元素超过数组长度时, ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList 集合看作一个长度可变的数组。          由于ArrayList集合的底层是使用一个数组来保存元素,在增加或删除指定位置的元素时,会导致创建新的数组,效率比较低,因此不适合做大量的增删操作。但这种数的结构允许程序通过索引的方式来访问元素,因此使用ArayList集合直找元素很便调

 

LinkedList:

前面提到ArrayList集合在查询元素时速度很快,但在增划无素时效率较低,为了克服这种局限性,可以使用List接口的另一个实现类LinkedList. 该集合内部维护了一个双向循环链表,链表中的每一一个元素都使用引用的方式来记住它的前一个元素和后一个元素,从而可以将所有的元素彼此连接起来。当插人一个新元素时,只需要修改元素之间的这种引用关系即可,删除一个节点也是如此。正因为这样的存储结构,所以LinkedList集合对于元素的增删操作具有很高的效率,LinkedList集合添加元素和删除元素的过程如下图所示:

 

集合两大类:
1.Collection(单列集合)
2.Map(双列集合)


Collection(接口):单列集合
1.List(接口):元素按进入先后顺序保存,可重复
LinkedList(实现类):双向循环链表,没有同步, 线程不安全
ArrayList(实现类):数组:初始长度10,没有同步, 线程不安全
Vector(实现类):类似ArrayList,同步, 线程安全

2.Set(接口):仅接收一次,不可重复,并做内部排序 
HashSet(实现类):使用hash表(数组)存储元素 (首先会调用存入对象的hashCode()来确定元素的存储位置,在调用equals()来确保该位置没有重复的元素,对于自定义的类需重写hashCode()和equals()方法。
TreeSet(实现类):内部采用平衡的排序二叉树来存储元素(小的在左边,大的在右边),既可以保证没有重复的元素,也可以对元素进行排序。需要继承Comparable接实现comparaTo()方法。

Map(接口):双列集合,键-值
HashMap(实现类):不能有重复键,没有同步, 线程不安全
Properties:(HashMap的子类):
Hashtable(实现类):类似HashMap,但 同步, 线程安全 ,但速度较慢
TreeMap (实现类):红黑树对所有的key进行排序

工具类:

Collections:提供了一系列的静态方法对List集合进行操作:反转,添加元素,随机排序,元素位置交换等;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值