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

java集合类浅谈

2019-02-20 23:49 68 查看

集合类的用途是"保存对象",可以划分为两个不同的概念:

[code]1.Collection
一组元素对象,每个位置只能保存一个元素(对象),Collection是最基本的集合接口,不能被实例化使用.
    Set 无序,元素不可重复。
       List 有序,元素可重复。
    Queue 队列(先进先出)。
2.Map
一组成对的"key-value"对象。就像一个小型数据库。可以通过"key"找到对应的"value"。

Collection

[code]1 Set
 Set继承自Collection接口,Set判断两个对象相同不是使用"=="运算符,而是根据equals方法。
set在加入一个新元素的时候,如果这个新元素和Set中已有元素进行equals比较都返回false,则可以添加,
否则不行。所以,在使用Set集合的时候。要为Set集合里的元素的实现类实现一个有效的equals(Object)方
法。
1.1 HashSet
      HashSet是Set接口的典型实现,HashSet使用HASH算法来存储集合中的元素,因此具有良好的存取和查找性能。当向HashSet集合中
  存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据该HashCode值决定该对象在HashSet中
  的存储位置。
      HashSet集合判断两个元素相等的标准是两个对象通过equals()方法比较相等,并且两个对象的hashCode()方法的返回值相等.如:
  需要把某个类的对象保存到HashSet集合中,我们就要重写这个类的equlas()方法和hashCode()方法时,应该尽量保证两个对象通
  过equals()方法比较返回true时,它们的hashCode()方法返回值也相等。
1.2 LinkedHashSet
    LinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置,但和HashSet不同的是,它同时使用链表维护元素的次序,这
  样使得元素看起来是以插入的顺序保存的。当遍历LinkedHashSet集合里的元素时,LinkedHashSet将会按元素的添加顺序来访问集合里
  的元素。
LinkedHashSet需要维护元素的插入顺序,因此性能略低于HashSet的性能,但在迭代访问Set里的全部元素时(遍历)将有很好的性能.
1.3 SortedSet
    此接口主要用于排序操作,即实现此接口的子类都属于排序的子类
1.4 TreeSet
    TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态
1.5 EnumSet
EnumSet是一个专门为枚举类设计的集合类,EnumSet中所有元素都必须是指定枚举类型的枚举值。
2 List
  2.1 ArrayList
基于数组的线性表,ArrayList是基于数组实现的List类,多线程不安全。随机访问元素效率高于LinkedList。但是插入和删除效率低
  于LinkedList。
  2.2 LinkedList
基于链的线性表。实现List接口和Deque接口,能根据索引来随机访问集合中的元素。也可以当作栈使用,多线程不安全。
  2.3 Vector
    Vector和ArrayList在用法上几乎完全相同,多线程安全。
  2.4 Stack
Stack是Vector提供的一个子类,用于模拟"栈"这种数据结构(后进先出).
3 Queue
Queue用于模拟"队列"这种数据结构(先进先出),不允许随机访问队列中的元素。
  3.1 Deque
此接口是一个"双端队列",可以同时从两端添加、删除元素,因此Deque的实现类既可以当成队列使用、也可以当成栈使用。
    比如ArrayDeque。

Map

[code]Map用于保存具有"映射关系"的数据,Map的key不允许重复。
[code]1 HashMap
  和HashSet集合不能保证元素的顺序一样,HashMap也不能保证key-value对的顺序。
并且类似于HashSet判断两个key是否相等的标准也是: 两个key通过equals()方法比较返回true、
同时两个key的hashCode值也必须相等. 多线程不安全。
2 Hashtable
 几乎可以等价于HashMap,多线程安全。
3 SortedMap
  Map下的一个子接口,有一个TreeMap实现类.
4 TreeMap
  TreeMap就是一个红黑树数据结构,每个key-value对即作为红黑树的一个节点。
TreeMap存储key-value对(节点)时,需要根据key对节点进行排序。
TreeMap可以保证所有的key-value对处于有序状态。
TreeMap有两种排序方式: 自然排序、定制排序.
5 EnumMap
  EnumMap是一个与枚举类一起使用的Map实现,EnumMap中的所有key都必须是单个枚举类的枚举值。
创建EnumMap时必须显式或隐式指定它对应的枚举类。
EnumMap根据key的自然顺序.(即枚举值在枚举类中的定义顺序)

 

[code] 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: