Java容器类接口的选择

我们知道Java容器类实际提供了四类接口:Map,List,Set和Queue,如下图所示,每种接口都有不止一个版本的实现,如果在实际编写程序时需要使用某种接口时该如何选择。

  • 从Oracle的Java Language Best Practices 中的说明可以看到建议不要在新程序中使用HashTable,Vector,Stack使用HashMap,ArrayList和LinkedList来替换。
  • ArrayList和LinkedList都实现了List接口,当ArrayList底层由数组实现,LinkedList由双向链表实现,因此在频繁使用插入删除操作时使用LinkedList,否则应该使用速度更快的ArrayList。
  • Set接口由HashSet,TreeSet和LinkedHashSet实现,HashSet最常用,速度最快,LinkedHashSet保持元素的插入顺序,TreeSet实现基于TreeMap,生成处于排序状态的Set。
  • List的ArrayList和LinkedList实现在并发编程时会产生所谓的Fail-Fast问题,此时需要使用CopyOnWriteArrayList来代替。
  • 除了IdentityHashMap,所有的Map实现的插入操作都会随着Map尺寸的变大而明显变慢,但是查找的代价要比插入的代价小得多,我们使用的查找操作也会更加频繁。
  • TreeMap比HashMap慢,TreeMap是一种创建有序列表的方式。
  • LinkedHashMap在执行插入操作时比HashMap慢一点,因为它维护散列数据结构的同时还要维护链表。
  • IdentityHashMap具有更好的性能,因为它使用==而不是equals()来比较元素。
时间: 2024-08-04 07:05:23

Java容器类接口的选择的相关文章

Java容器类接口:Iterator,Collection,Map

Iterator Iterator被称为迭代器,是一个对象,它的工作是遍历并选择序列中的对象,可以实现以下一些操作: 使用方法iterator()要求容器返回一个Iterator,Iterator将返回序列的第一个元素: 使用next()获取序列中的下一个元素: 使用hasNext()检查序列中是否有元素: 使用remove()将迭代器最近返回的元素删除: Iterator只能向前移动,ListIterator是一个更加强大的Iterator的子类,它只能用于各种List类的访问,ListIte

Java容器类基础

Java容器类基础 Java实用类库提供了一套相当完善的容器类,基本类型为List,Set,Map,Queue.它们都有一些特性,例如Set对于每一个值都只保存一个对象,Map允许你将对象和对象关联起来.此外,Java容器类都可以自动调节尺寸.因此,与数组不同,你可以放置任意数量的对象到容器中而不用担心容器应该设置为多大. Java容器类有4个接口,它们分别上面提到过的List,Set,Map,Queue:在理想情况下,你编写的代码大多数情况是在和这些接口打交道,并且你唯一需要指定所要使用精确类

Java容器类的深入理解

Java容器类包含List.ArrayList.Vector及map.HashTable.HashMap ArrayList和HashMap是异步的,Vector和HashTable是同步的,所以Vector和HashTable是线程安全的,而ArrayList和HashMap并不是线程安全的.因为同步需要花费机器时间,所以Vector和HashTable的执行效率要低于ArrayList和HashMap. Collection ├List       接口 │├LinkedList      

java开发中如何选择Set、List、Map、数组

---我不生产代码,我只是代码的搬运工. 在JAVA的util包中有两个所有集合的父接口Collection和Map,它们的父子关系: java.util +Collection 这个接口extends自 --java.lang.Iterable接口 +List 接口 -ArrayList 类 -LinkedList 类 -Vector 类     此类是实现同步的 +Queue 接口 +不常用,在此不表. +Set 接口 +SortedSet 接口 -TreeSet 类 -HashSet +M

java容器类总结

java容器类只有两个主要类型:Collection和Map. Collection容器每个槽只有一个元素. Map中持有键值对关联. Collection子接口有List和Set. List:以特定次序存储元素.之类有ArrayList和LinkedList ArrayList:擅长随机访问. LinkedList:擅长插入.删除和移动元素. Vector:同步,安全,性能较低.其余基本和ArrayList一样. Set:不含重复元素. HashSet:使用散列函数. TreeSet:使用红黑

【转】java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别

原文网址:http://www.360doc.com/content/15/0427/22/1709014_466468021.shtml java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别. 经常会看到程序中使用了记录集,常用的有Collection.HashMap.HashSet.ArrayList,因为分不清楚它们之间的关系,所以在使用时经常会混淆,以至于不知道从何下手.在这儿作了一个小例

Java中接口和抽象类的比较

Java中接口和抽象类的比较-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计使用多态性的基础[[1]].(在面向对象语言中,接口的多种不同的实现方式即为多态.多态性是允许你将父对象设置成为和一个或更多的他的子对象的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自"Delphi4编程技术内幕").简单的说,就是一句话:允许将子类类型的

Java容器类概述

1.简介 容器是一种在一个单元里处理一组复杂元素的对象.使用集合框架理论上能够减少编程工作量,提高程序的速度和质量,毕竟类库帮我们实现的集合在一定程度上时最优的.在Java中通过java.util为用户实现了一个Collection Framework,这个集合框架用统一的架构来表示和操作所有的集合,具体包含以下内容: interface:表示集合的抽象数据类型,它将容器的具体实现与提供的接口分离: implement:表示集合接口的具体实现: algorithms:对集合中的元素提供的一些泛型

Java中接口和抽象类的比較

Java中接口和抽象类的比較-2013年5月写的读书笔记摘要 1. 概述 接口(Interface)和抽象类(abstract class)是 Java 语言中支持抽象类的两种机制,是Java程序设计使用多态性的基础[[1]]. (在面向对象语言中,接口的多种不同的实现方式即为多态. 多态性是同意你将父对象设置成为和一个或很多其它的他的子对象的技术.赋值之后.父对象就能够依据当前赋值给它的子对象的特性以不同的方式运作(摘自"Delphi4编程技术内幕"). 简单的说.就是一句话:同意将