Java集合框架小总结

[img]http://dl2.iteye.com/upload/attachment/0095/3285/fdd3402b-6064-3ca1-9153-17fdbaf195e3.png[/img]
[size=x-large][b]Java集合框架小结[/b][/size]

[b][size=large][color=red]一、什么是集合框架?[/color][/size][/b]
[list]
[*][b]概述[/b]
[size=small]集合是一个容器,由多个项目组成的一个单元组, 比如说巧克力罐里面装有各种各样巧 克力,一组商品列表的名称;
集合几乎在java语言的每个地方都用到了,你敢说没吗?他带着几个集合类:Vector Array Stack HashTable
集合由以下几部分组成:[/size]

[b]接口(interface):[/b]
[size=small]集合中提供了抽象的数据类型来表示接口,Java.util.Collection 在集合的层级关系中是最顶层的接口(root interface);
他包含了一些重要的也是常用的方法,例如:size(); add(); remove(); iterator[/size](); clear();
[size=small]在java.util.List, java.util.Set, java.util.Queue, java.util.Map 接口中实现类一定会实现;
但是其中Map接口不是继承自java.util.Collection 接口的,但是都属于集合框架,因为他们都是在java.util 包下面[/size]

[b]实现类(Implementtation Class)[/b]
[size=small]java 对这些集合接口都提供了核心实现类,可以使用他们在我们的程序中创建不同的集合类型
比如像一些比较重要的集合类 ArryList LinkedList HashMap TreeMap HashSet
TreeSet 这些类是在我们平时使用最多的。
当然了如果我们需要使用一些比较特殊的集合类,我们可以继承他们然后创建我们自定义的实现类

在java1.5中提供了一些允许修改集合同时遍历的集合类, 这是线程安全的;比如一些:CopyOnWriteArrayList
ConcurrentHashMap CopyOnWriteArrySet 这些类是存在java.util.concurrent包中;
要明白的是:所有的集合类都存在java.util 和 java.util。concurrent包中!![/size]
[/list]
[size=large][color=red][b]二、集合框架接口[/b][/color][/size]
[size=small]集合接口是集合框架的基础!
所有的核心集合的接口是通用的,比如说公共接口Collection<E> 了解泛型就知道, E所表示的是泛型。当我们
在使用或者是说指定集合的时候,我们就用E来指定包含类的对象 这句话不理解的话 请了解泛型的概念;
这样的好处是可以在我们的运行错误减少很多, 他会在编译时会检查语义的正确与否[/size][list]

[*][b]Collection Interface[/b]
[size=small]Collection 接口是接口层级的根。由元素对象组成的一组东西叫做集合, 就这么说吧,不太好比喻。
在这个接口中会提供方法来告诉你在集合中有多少元素 size(), 还有检查指定对象是否存在 contain()
和添加元素方法add() 删除元素方法remove() 并且提供一个迭代器
还提供了一种批量操作的,想必都用过:containsAll(); addAll(); removeAll(); retainAll(); clear();[/size]

[*][b]Iterator Interface[/b]
[size=small]Iterator接口提供的方法就是可以遍历整个集合, 通过它可以得到这个集合的任意的实例;
迭代器允许我们在迭代的过程中从底层移除元素。[/size]

[*]Set Interface
[size=small]set的集合不能包含重复的元素,在java中一般有三种通用的实现set接口的方法:
HashSet TreeSet LinkedHashSet
这个接口呢不允许随机访问这里面的元素,通俗点就是不能通过索引或下标的方式
只能通过迭代器或者foreach循环来遍历集合中的元素。[/size]

[*][b]List Interface[/b]
[size=small]我们常用接口,List列表是一个有序的集合,他可以包含重复的元素, 我们可以从索引去访问集合的任何元素
而且这个集合的长度是动态的。其中ArrayList 和 LinkedList 是实现这个接口的类
List接口提供了一种可以为指定的位置添加值的方法,还可以使用索引去替换和删除该元素[/size]

[*][b]Queue Interface[/b]
[size=small]这是一个队列接口
队列集合一般是用来处理保存多个元素,除了这个之外还提供了插入,提取,一些检查的操作。
典型的队列都是先进先出,这个都好理解,新插入的元素都排在队列的尾部[/size]

[*][b]Map Interface[/b]
[size=small]Map接口也是大家用的比较多的了, Map集合是由一个关键字K 映射到一个值对象V;
一个Map集合不能包含重复的key, 每一个键只能对应一个值(也就是说无论你put 了多少次,都是以最后的值为准!)
java中实现的类有:
HashMap TreeMap LinkedHashMap
Map集合的一般操作就是get(key) put(key) containskey(key) containsvalue[/size](V) isEmpty();
具体的用法查阅API;

[*][b]ListIterator Interface[/b]
[size=small]列表迭代器接口:
这个集合呢允许我们从任何方向开始遍历,在迭代的时候任意修改值,并可以得到对象的当前位置;
它没有像list集合一样有当前元素这么一说法,他元素的当前位置就是返回元素的上一个元素和下一个元素之间[/size]

[*][b]SortedSet Interface[/b]
[size=small]这是一个会自动按照升序排序的集合,一般是利用这种排序的功能做一些额外的操作, 适合用于单词列表和一些名单等[/size]

[*][b]SortedMap Interface[/b]
[size=small]也是一个会自动按照排序的集合,不过不同点就是会按照key 的值排序, 适用于字典啊 电话薄什么的[/size]
[/list]

[size=large][color=red][b]三、集合框架类[/b][/color][/size]
java集合框架有很多的实现了接口的类,我们用的最多的就是ArryList HashMap [size=small]HashSet
在java1.5版本中就开始加入了并发的实现类。例如:CopyOnWriteArrayList ConcurrentHashMap
一般的来讲,集合类都不是线程安全类,他们是快速的迭代器(通俗的讲)[/size][list]

[*][b]HashSet Class[/b]
[size=small]这个类是实现了Set接口, 他的集合迭代是没有顺序, 可以存在空元素
提供了基本的操作:add() remove() contains() size(), 他的数据存储是基于哈希表结构的,所以在使用中他会自动的去增大容量[/size]

[*][b]TreeSet Class[/b]
这个比较啰嗦, 没理解;

[*][b]ArrayList Class[/b]
[size=small]这个就是比较熟悉的类了,他是实现了List接口 是一个可以调整大小的基于数组的实现类
类本身提供了一些方法去操作内部的存储数组大小,这个类不是同步的,不是线程安全类[/size]

[*][b]LinkedList Class[/b]
[size=small]他是一个实现了List接口和双向队列的接口,他可以从集合的任意一端去执行操作(add or update)
是双向链表[/size]

[*][b]HashMap Class[/b]
[size=small]基于哈希表的接口实现类,允许k v 为null, HashMap 大致上和HashTable 一样,除了之前说的允许为NULL值
类中的集合数据是无序保存的。
提供了常用的操作 get 和 put 方法, 而且可以通过构造函数来初始化集合的大小[/size]

[*][b]TreeMap Class[/b]
了解不多 先暂停理解

[*][b]PriorityQueue Class[/b]
[size=small]这个类是优先级队列实现类, 这个得好好理解, 有时候我们希望根据元素的优先级进行处理,这个情况下就用上场了,
PriorityQueue 不允许元素空值, 且是无边界的, 这个我接下来用个专门的列子来学习学习,先放放[/size][/list]

[size=large][color=red][b]四、Collection 类[/b][/color][/size]
[list]
[*][b]Collection class[/b]
[size=small]这个类包括了一下集合操作的静态方法, 会返回一个新的指定的集合实例,可以通过代码 new Collection() 看看。
还包括了一些集合框架的算法, 比如说二分查找, 排序等方法 可以把这个类当做工具类来使用。[/size]

[*][b]Collection 同步包装的方法[/b]
[size=small]同步封装器为任意的集合都添加了自动同步, 也就是线程安全。其中这些核心接口有一些静态的工厂方法可以调用

每个方法都返回一个指定集合(自动同步)[/size][/list]

ublic static Collection synchronizedCollection(Collection c);
public static Set synchronizedSet(Set s);
public static List synchronizedList(List list);
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m);
public static SortedSet synchronizedSortedSet(SortedSet s);
public static <K,V> SortedMap<K,V> synchronizedSortedMap(SortedMap<K,V> m);


[size=large][color=red][b]五、线程安全的集合[/b][/color][/size]
[size=small]从java1.5就包含了线程安全的集合类, 可以同时遍历和修改元素
这些类有一些是
CopyOnWriteArrayList, ConcurrentHashMap, CopyOnWriteArraySet[/size].

最后用一张图来说明他们的特性
请看附件(不知道怎么贴图)
理解不到位的地方请多包涵,继续学习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值