Collection与Map的概述

一、Collection的概念

Collection是一种存储对象的容器,同样的,数组也是一种存储数据的容器。

二、Collection与数组的区别

两者之间的不同之处在于,第一,数组存储的长度是不可变的,而Collection存储的长度是可变的;第二,数组存储的是基本类型数据,而Collection可以存储不同数据类型的对象。第三,Collection是用来存储对象的,而数组不能存储对象。

三、Collection的分类

Collection主要分为有序集合List与无序集合Set,有序集合List可存放相同的数据,且数据的存取是有序的;而无序集合Set不能存放相同的数据,且数据的存取是无序的。Collection有两个子接口,分别是List与Set。

1.有序集合

List是一个有序集合,有序集合可分为LinkedList,ArrayList,Vector以及Stack。

LinkedList是一种链表式结构,具有增删操作快,查询操作慢的特点。

ArrayList是一种数组结构,通过索引来查询数据,具有查询快,增删慢的特点。

Vector是也是一种数据结构,操作是线程同步的,由于考虑到了线程安全问题,效率较ArrayList低下。

Stack是Vector的子类,是一种后进先出的堆栈式结构,也是一种线程安全类,具有Pop,Push,Peek,Search等堆栈操作。

2.无序集合

Set是一个无序集合,无序集合可分为TreeSet,HashSet,LinkedHashSet。

TreeSet是一种树结构,元素是按照顺序排序的,它的remove,add,contains等方法的复杂度都是O(log(n))。

HashSet通过hash表实现,不需要将元素进行排序,对数据的操作比TreeSet高。HashSet是一种线程不安全的类,因为它内部的维护的数据采用的是HashMap,而HashMap是一种线程不安全的数据结构。(如何证明HashSet不是线程安全的?见博客http://blog.csdn.net/micro_hz/article/details/51839246)

LinkedHashSet也是一种哈希结构,介于HashSet与TreeSet之间,同时有一个双向链表来记录插入的顺序,基本方法的复杂度为O(1)。

四、Collection的常用操作

add()——增加元素

remove()——删除元素

clear()——清空所有元素

isEmpty()——判断集合是否为空

contains()——是否含有指定对象

toArray()——把集合转换成数组

五、Map的分类

Map是用来存储键值对的数据结构,常用的有HashMap,TreeMap,HashTable以及LinkedHashMap。

1、 HashMap实现了Map接口,继承了AbstractMap,是一种通过Key快速地存,取Value。HashMap不是线程安全的,它的key和value都可以为null,而且HashMap中的映射不是有序的。

2、TreeMap是基于红黑树实现的,可对数据进行自然排序。HashMap的效率比TreeMap的效率要高,因此不考虑排序的情况下,建议使用HashMap。

3、HashTable与HashMap的不同之处在于HashTable的Key与Value都不能为null,并且HashTable是线程安全的。

4、LinkedHashMap是HashMap的一个子类,通过使用一个双向链表的结构来记录插入的顺序,而LinkedHashMap也不是线程安全的。

六、Map的通用方法

put()——修改map中存在的映射

remove()——删除map中映射

entrySet()——遍历map

containsKey()——查看map中是否存在该键

containsValue()——查看map中是否存在该值

get()——获取map中指定的键所映射的值

keyset()——获取映射中所包含的键的set视图

Values()——获取映射中所包含的指的collection视图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值