您的位置:首页 > 编程语言 > Java开发

简单介绍Java集合类

2015-01-13 08:27 204 查看
先说说为什么要用带Java的集合类?

在Java中集合就是用来存储数据的,有人说了可以用数组啊。没错,的确可以用数组,

但是如果你不知道你要存放的数据有多少的长度,那你该怎么存呢?也有人会说直接分配一个较大的内存空间就行了,

这说法也没有错。可是这样一来就极大的浪费内存的预留空间,所以就产生了集合这样的一个机制。

因为如果你不清楚你要存放数据的个数,或者想要比数组存放机制跟灵活的机制时,这时候就需要用到集合了。

Java的集合可以先分为2大接口:Collection类 和 Map类。

Collection类下又有3个子接口:Set(集)、List(列表) 和 Queue(队列)。

一、Set集合:

1、HashSet类:
1、三大特点:

a) 不保证元素排列顺序,可能发生变化。

b) 线程不安全,在线程访问时不是同步的,若有多线程访问时要保证手动同步。

c) 集合元素值可为null。

2、存储机制(equals,hashCode(哈希码))

2、HashSet子类LinkedHashSet类:

3、TreeSet类:
1、特点:确保元素处于排序状态
2、实现子集合的方法:
1、subSet();
2、headSet();
3、tailSet();
还有一些就得靠读者自己去找了。

那该如何选择Set类呢?

若若是常用的添加和查询等操作,应该用HashSet类好。

只有当需要保持排序时用TreeSet其余都应该用HashSet。

EnumSet同一个枚举类的枚举值作为集合。

Set类都是线程不安全的,若有多个线程访问Set集合必须手动保证同步(可用Collection中的synchronizedSortedSet来实现--最好在创建时就进行,防止意外非同步访问)。

二、List集合:

是一个有序,可重复的集合,可索引查询。

其判断相等的标准是equals()方法来实现的。

listIterator()方法:

1、hasPrevious():返回迭代器关联的集合是否还有上一个元素。

2、Previous:返回迭代器的上一个元素。

3、add():指定位置加入一个元素。

List集合有2大类:

1、ArrayList类

2、Vector类(二者创建若没有指明长度都默认为10)

ArrayList是线程不安全的,Vector是安全的。

Arrays.ArrayList是一个固定长度的集合。不可增加或删除该集合里的元素。

三、Queue集合:

模拟队列的集合,不允许随机访问队列中的元素。

Priority实现类:

1、此类不是按加入顺序排序的,而是按元素大小重新排序的,不允许插入null元素。

2、此类有2种排序方法:自然排序和定制排序。

Deque接口和ArrayDeque:

1、Deque代表双端队列,可进行两端操作队列元素。

2、注意一些操作接口的方法。

Map集合:

特性:
保存具有映射关系的数据。用法以及一些特性与Set集合很类似。
Map集合里保存的不是一个一个的元素,而是一对一对的key-value。而且每个key不能相同,既不能重复,否则在查找
的时候是依据key来查找元素的。
任何两个key值进行比较(equals())总是返回false。

1、HashMap和Hashtable实现类:
前者是非线程安全的,后者是线程安全的,所以相对而言后者的效率会更低点。
HashMap是允许null作为key-value的值得。
Hashtable不允许null作为key和value的值否则抛出异常。
而且二者不能保证key-value对的顺序的。

2、判断两个元素相等的标准是:
Key:要通过equals()比较后返回true,而且HashCode的值
也要相等的。
Value:只需要equals()返回true 即可。

一、LinkedHashMap实现类:

也是用双向链表来维护key-value顺序(只需要考虑key的顺序),该类是负责Map集合的迭代顺序的。
在使用时可以避免对HashMap、Hashtable里的key-value对进行排序,又可以避免使用TreeMap所增加的成本。
在元素迭代时效率较高。

二、Properties读写属性文件:

Properties是Hashtable的子类,而且此类都是字符串的类型。

Properties类可以把Map对象和属性文件关联起来,从而可以把Map对象中的key-value写入属性文件。

以及一些有关操作的关键代码,例如:getProperty、setProperty等。

三、SortedMap接口(Map子接口)和TreeMap实现类:

TreeMap也是红黑树结构,保证所有key-value对的顺序,也有自然排序和定制排序。

根据key顺序访问key-value对的方法以及截取子TreeMap的方法。

四、WeakHashMap实现类:

此类与HashMap很相似。

WeakHashMap是一个弱引用,可能被垃圾回收,也可能被自身回收。

HashMap是一个强引用,只要HashMap不销毁其key-value对就不会被销毁。

五、IdentityHashMap实现类:

要求严格相等。(什么叫严格相等?)

看如下一张图:



六:EnumMap实现类:

枚举类,此类的key必须是单个枚举类的枚举值。

在内部以数组形式存储,这种方式紧凑,高效。

不许null作为key。

七、总结:

在程序中较常使用的是HashSet和HashMap类。若需要保证排序的话就使用TreeMap类来实现。

还有一些Collection操作集合的工具类。

总结下有四大方面:

1、排序操作;

2、查找、替换操作;

3、同步控制;

4、设置不可变集合;

很多东西我还没有看到,到后面在补充,或者读者也可以补充,敬请谅解!!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: