java的集合类(备忘)

一、集合类

1、集合其实就是存放对象的容器,专业点说就是集合是用了存储和管理其它对象的对象,即对象的容器。集合可以扩容,长度可变,可以存储多种类型的数据,而数组长度不可变,只能存储单一类型的元素。

2、用图来总结哈集合的总况

map


Collection


下面是网上找到的图:


(注:上述类图中,实线边框的是实现类,比如ArrayList,LinkedList,HashMap等,折线边框的是抽象类,如AbstractList,AbstractMap等,而点线边框的是接口,比如Collection,Iterator,List等


集合中的结构和几个实现类:

有序否

是否允许元素重复

Collection

List

Set

AbstractSet

HashSet

TreeSet

是(用二叉树排序)

Map

AbstractMap

使用key-value来映射和存储数据,key必须唯一,value可以重复。

HashMap

TreeMap

是(用二叉树排序)

总述:List、Set、Map是这个集合体系中最主要的三个接口。

其中List/Set继承至Collection接口。Set不允许元素重复,HashSet和TreeSet是两个主要的实现类;List有序且允许元素重复,ArrayList、LinkedList和Vector是三个主要的实现 。

Map也属于集合系统,但是和Collection接口不同,Map是key对value的映射集合,其中key列就是一个集合。Key是不能重复的,但是value是可以重复的,HashMap、TreeMap和Hashtable是三个主要的实现类。

SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。

1、Collection接口:

Collection接口是最基本的集合接口,一个Collection代表一组Object的集合,这些Object被称作为Collection的元素。所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collection,有一个Collection参数的构造函数用于创建一个新的Collection,这个新的Collection与传入的Collection有相同的元素,后一个构造函数允许用户复制一个Collection。

如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素,典型的用法如下:


这个对于继承或者实现了Collection接口的类都适用。

操作:

单元素添加、删除操作

boolean add(Object obj):将对象添加给集合

boolean remove(Object obj):如果集合中有与obj相匹配的对象,则删除该对象obj。

查询操作

 int size():返回当前集合中元素的数量(长度)

boolean isEmpty():判断集合中是否有任何元素(是否为空)

boolean contains(Object obj):查找集合中是否含有对象obj

Iterator iterator();返回一个迭代器(Iterator类型),用来访问集合中的各个元素

组操作:作用于元素组或整个集合

boolean containsAll(Collection coll):查找集合中是否含有集合coll中所有元素

boolean addAll(Collection coll):将集合c中所有元素添加给该集合(批量添加集合)

void clear():删除集合中所有元素

void removeAll(Collection coll):从集合中删除集合coll中的所有元素

Void retainAll(Collection coll):从集合中删除集合coll中不包含的元素(也就是说只保留集合coll中的元素)

Collection转换为Object数组

Object[] toArray():返回一个内含集合所有元素的array(数组)

Object[] toArray(Object[]a):返回一个内含集合所有元素的array。运行期返回的array和参数a的型别相同,需要转换为正确型别。


1、List接口:它对Collection进行了简单的扩充,它的具体实现类常用的有ArrayList和LinkedList

ArrayList

它是一种类似数组的形式进行存储,因此它的随机访问速度极快

LinkedList

它的内部实现是链表,它适合于在链表中间需要频繁插入和删除操作

Iterator

只能对容器进行向前遍历

ListIterator

继承了Iterator的思想,并提供了对List进行双向遍历的方法。

2、Set接口:它也是Collection的一种扩展,但又与List不同,在它中的对象元素不允许重复。它常用的具体实现有HashSet和TreeSet类。

HashSet

HashSet能快速定位一个元素,但是你方法哦HashSet中的对象需要实现hashCode()方法,它使用了前面说过的哈希码的算法。

TreeSet

TreeSet则将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,

3、Comparable接口和Comparator接口

在“集合框架”中有两种比较接口:Comparable接口和Comparator接口。像String和Integer等实现Comparable接口以提供一定排序方式,但这样只能实现该接口一次,对于那些没有实现Comparable接口的类、或者自定义的类,您可以通过Comparator接口来定义您自己的比较方式。

Comparable

在java.lang包中,Comparable接口适用于一个类有自然顺序的时候,假定对象集合是同一个类型,该接口允许您把集合排序成自然顺序。

Comparator

若一个类不能用于实现java.lang.Comparable,或者您不喜欢缺省的Comparable行为并想提供自己的排序顺序(可能多种排序顺序方式),你可以实现Comparator接口,从而定义一个比较器。

二、LinkedHashMap与HashMap

1、LinkedHashMap和HashMap都是java.util.Map的实现类。其中LinkedHashMap是HashMap的一个子类。

2、

HashMap

具有很快的访问速度;

遍历时,取得数据的顺序是完全随机的;

最多只允许一条记录的键位null;允许多条记录的值为null

不支持线程的同步,即任一时刻可以有多个线程同时写HashMap,可能会导致数据的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力,或者使用ConcurrentHashMap。

它的遍历速度与它的容量有关

LinkedHashMap

遍历时,取得的数据与存入的时候的顺序一致

遍历的时候,一般情况比HashMap慢,但是它的遍历速度只是和实际数据有关,与容量无关。

http://mmqzlj.blog.51cto.com/2092359/550631

http://www.cnblogs.com/hubingxu/archive/2012/02/21/2361281.html

三、List与ArrayList

1.List是一个接口,而ArrayList是一个类。且ArrayList继承并实现了List类

2.List list=new ArrayList();这句创建了一个ArrayList的对象后把上溯到了List,也就是说list只能使用List的所有对象属性和方法;如果它们的属性和方法都相同的话,则属性调用的是List中的,方法是调用的ArrayList中的;

ArrayList alist=new ArrayList();这句创建了ArrayList的对象,也就是说alist可以使用ArrayList中的特有的方法;

但是在平常使用中的时候,提倡用第一种,因为List有多个实现类。

http://www.cnblogs.com/aisiteru/articles/1151874.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值