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]
相关文章推荐
- 浅谈java集合类(三)【Set,Queue】
- 浅谈JAVA集合 Map List Set等java集合类
- 浅谈java集合类
- 浅谈JAVA集合 Map List Set等java集合类
- 浅谈Java集合类(一)【List】
- 浅谈java集合类(二)【Map】
- 浅谈C++中运算符重载
- 浅谈自底向上的Shell脚本编程及效率优化
- 浅谈几种命名空间
- 浅谈js分页的几种方法
- 浅谈Object Pascal的指针
- 浅谈观察者模式
- 浅谈sqlserver下float的不确定性
- 浅谈API HOOK技术(二)
- 关于自己对Xtragrid控件的认识,浅谈
- 浅谈TCP/IP协议栈(八)UDP协议简述
- 浅谈C++中的类所占内存
- 浅谈如何用We7站群平台打造垂直性政务网站
- 浅谈基于流媒体转发技术的IP数字监控系统
- 浅谈js解决多线程 webWorker介绍