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

java集合相关简介

2017-07-24 10:18 218 查看
一、集合与数组简介

数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,要对数组进行增加减少长度操作复杂,所以引入集合。

集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用。

二、集合框架

Collection

├List

│├LinkedList

│├ArrayList

│└Vector

│ └Stack

└Set

Map

├Hashtable

├HashMap

└WeakHashMap

三、常用接口和类简介

List

List是一个接口。
List是有序的Collection。
List允许存储重复的元素。
List允许存储所有类型元素,包括NULL。

实现List接口的常用类主要有:
1、ArrayList:
一个可变大小的数组
不同步,即当有两个线程同时调用时,一方改变不会影响另一方。
2、LinkedList:
一个双向循环链表,其内每个对象除了数据本身外,还有两个引用,分别指向前一个元素和后一个元素
不同步
3、Vector:几乎与ArrayList完全相同,但其实现了同步。
4、Stack继承自Vector,实现一个后进先出的堆栈。Stack提供5个额外的方法使得Vector得以被当作堆栈使用。

对于ArrayList,查询速度很快,增加和删除(非最后一个节点)操作非常慢(本质上由数组的特性决定的)
对于LinkedList,查询速度非常慢,增加和删除操作非常快(本质上是由双向循环链表决定的)

Set

Set是一个接口。
Set实现了Collection接口。
Set不允许出现重复的元素。

实现Set接口的常用类主要有:
1、HashSet:
使用的是相当复杂的方式来存储元素的,使用HashSet能够最快的获取集合中的元素,效率非常高(以空间换时间)。
2、TreeSet:
会自动排序,如果存放的对象不能排序则会报错,所以存放的对象必须指定排序规则。排序规则包括自然排序和客户排序。
①自然排序:TreeSet要添加哪个对象就在哪个对象类上面实现java.lang.Comparable接口,并且重写comparaTo()方法,返回0则表示是同一个对象,否则为不同对象。
②客户排序:建立一个第三方类并实现java.util.Comparator接口。并重写方法。定义集合形式为TreeSet ts = new TreeSet(new 第三方类());

Map

Map是一个接口。
Map没有继承Collection接口。
Map提供key到value的映射。
Map不能包含相同的key。
Map的key只能映射一个value。
Map接口提供3种集合的视图,一组key集合,一组value集合,或者一组key-value映射。

实现Map接口的常用类主要有:
1、HashMap:Map接口的典型实现类。无序、不同步、key/value允许为NULL。
2、Hashtable:类似于HashMap。不同的是:同步(即线程安全)、key/value不允许为NULL。
3、TreeMap:会自动排序的HashMap。其排序方式等同于TreeSet。
4、LinkHashMap:有序的HashMap。不同于TreeMap,它是用双向链表来维护 key-value 对的次序(其实只考虑了key的次序),该链表负责维护Map的迭代顺序,迭代顺序与 key-value 对的插入顺序一致。
5、WeakHashMap: 与HashMap的用法基本相似。不同在于:
HashMap的值保留了对实际对象的强引用,这意味着只要该HashMap对象不被销毁,该HashMap 中的所有key 所引用的对象就不会被垃圾回收, hashMap也不会主动删除这些 key-value 对;但WeakHashMap只保留了对实际对象的弱引用,这意味着如果 WeakHashMap 对象的 key所引用的对象没有被其他强引用变量所引用, 则这些key所引用的对象可能被垃圾回收, WeakHashMap也可能自动删除这些 key所对应的 key-value对。
6、IdentityHashMap:与HashMap的用法基本相似。不同在于:
IdentityHashMap 在处理两个key值相等时比较独特:在 IdentityHashMap中,当且仅当两个key严格相等(key1==key2)时, IdentityHashMap 才认为这两个key相等;对于普通的 HashMap 而言,只要 key1和 key2通过 equals() 方法比较返回true,且它们的 hashCode 值相等即可。
7、EnumMap:
EnumMap在内部以数组的形式保存
EnumMap根据key的自然顺序(即枚举值在枚举类中定义顺序)来维护key-value 对的顺序。
EnumMap不允许使用null来做为 key,但允许null作为value。
创建EnumMap时必须指定一个枚举类,从而将该 EnumMap和指定枚举类关联起来
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 集合