简单介绍Java集合类


先说说为什么要用带Java的集合类?


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


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

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

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


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


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


一、Set集合:

1、HashSet类:

1、三大特点:

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

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

c) 集合元素值可为null

2、存储机制(equalshashCode(哈希码))

 

2、HashSet子类LinkedHashSet类:

 

3、TreeSet类:

1、特点:确保元素处于排序状态

2、实现子集合的方法:

1subSet();

2headSet();

3tailSet();

还有一些就得靠读者自己去找了。

那该如何选择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

 

1HashMapHashtable实现类:

前者是非线程安全的,后者是线程安全的,所以相对而言后者的效率会更低点。

HashMap是允许null作为key-value的值得。

Hashtable不允许null作为keyvalue的值否则抛出异常。

  而且二者不能保证key-value对的顺序的。

 

2、判断两个元素相等的标准是:

Key:要通过equals()比较后返回true,而且HashCode的值  也要相等的。

Value:只需要equals()返回true 即可。

 

一、LinkedHashMap实现类:

 

也是用双向链表来维护key-value顺序(只需要考虑key的顺序),该类是负责Map集合的迭代顺序的。

在使用时可以避免对HashMapHashtable里的key-value对进行排序,又可以避免使用TreeMap所增加的成本。

在元素迭代时效率较高。


二、Properties读写属性文件:

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

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

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

 

三、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、设置不可变集合;


很多东西我还没有看到,到后面在补充,或者读者也可以补充,敬请谅解!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值