Java集合框架
来源:互联网 发布:强力手机数据恢复软件 编辑:程序博客网 时间:2024/06/10 10:41
List(后缀):有序(存入和取出的顺序一致)列表,允许存放重复的元素;
List的实现类有LinkedList, ArrayList, Vector, Stack。
ArrayList:数组实现,查询快,增删慢,线程不安全,轻量级;
LinkedList:链表实现,增删快,查询慢
注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));
Vector:数组实现,线程安全,重量级 Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%.
Set(后缀):接口---实现类: HashSet、LinkedHashSet
无序集合,不允许存放重复的元素;允许使用null元素
判断元素的唯一性:
是通过对象的hashCode和equals方法来完成对象唯一性的。
如果对象的hashCode值不同,那么不用判断equals方法,就直接存储到哈希表中。
如果对象的hashCode值相同,那么要再次判断对象的equals方法是否为true。
如果为true,视为相同元素,不存。如果为false,那么视为不同元素,就进行存储。
注意:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。
按照散列函数的定义,如果两个对象相 同,即obj1.equals(obj2)=true,则它们的hashCode必须相同,但如果两个对象不同,则它们的hashCode不一定不同,如 果两个不同对象的hashCode相同,这种现象称为冲突,冲突会导致操作哈希表的时间开销增大,所以尽量定义好的hashCode()方法,能加快哈希 表的操作。
HashSet:
1、不能保证元素的排列顺序,顺序有可能发生变化
2、不是同步的
3、集合元素可以是null,但只能放入一个null
LinkedHashSet(当不希望集合中有重复值,并且希望按照元素的插入顺序进行迭代遍历时可采用此类。)
LinkedHashSet集合同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。
LinkedHashSet在迭代访问Set中的全部元素时,性能比HashSet好,但是插入时性能稍微逊色于HashSet。
TreeSet类
TreeSet保证集中的元素是有序的,有2种方法可以实现对象之间的可比较性:1,添加到TreeSet的对象实现了Comparable接口;2,给规则集的元素指定一个比较器(Comparator)
TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。
TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0
自然排序
自然排序使用要排序元素的CompareTo(Object obj)方法来比较元素之间大小关系,然后将元素按照升序排列。
Java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现了该接口的对象就可以比较大小。
obj1.compareTo(obj2)方法如果返回0,则说明被比较的两个对象相等,如果返回一个正数,则表明obj1大于obj2,如果是 负数,则表明obj1小于obj2。
定制排序
自然排序是根据集合元素的大小,以升序排列,如果要定制排序,应该使用Comparator接口,实现 int compare(T o1,T o2)方法
Properties::key和value都是String类型,用来读配置文件;
//此处要保证参数的顺序,采用LinkedHashMap.
Map<String, String> map = new LinkedHashMap<String,String>();
// 判断是从 "转帐、缴存、转出" 页面到成功页面的
Hash(前缀):是指该容器采用的是hash算法存储的,元素具有唯一性,需要覆盖hashcode和equals方法。
Link(前缀):表示该集合容器内部使用的是链表数据结构实现的,增删快,如LinkedList。
Array(前缀):表示该集合容器内部使用的是数组数据结构实现的,查询快,有角标,如ArrayList。
Tree(前缀):表示该集合容器内部使用的是红黑树存储的(是一种顺序存储,且没有重复元素的,平均性能很高效)如TreeSet;
如何判断元素的唯一性:
第一种:让元素自身具备比较功能,元就需要实现Comparable接口。覆盖compareTo方法。
第二种:让集合自身具备比较功能,定义一个类实现Comparator接口,覆盖compare方法。将该类对象作为参数传递给TreeSet集合的构造函数。
集合使用技巧:
TreeSet:元素需要唯一且元素需要制定顺序。
HashSet:元素需要唯一但是元素不需要指定顺序。
LinkedList:元素不需要唯一但是增删频繁。
ArrayList:元素不需要唯一但是需要随机访问的。
Arrays类:提供了对数组排序,查找,比较,填充元素的各种静态方法。
Collections类(注意不是Collection):提供了许多静态的方法来管理集合,线性表
容器类的相关描述
三、总结
1. 各种Collection和各种Map都可以在你向其中添加更多的元素时,自动调整其尺寸。容器不能持有基本类型,但是自动包装机制会仔细地执行基本类型到容器中的所持有的包装器类型之间的双向转换。
2. ArrayList:大量的随机访问;LinkedList:经常从表中间插入或删除元素;
3. 各种Queue以及栈的行为,有LinkedList提供支持;
4. Map是一种将对象(而非数字)与对象相关联的设计。
HashMap:快速访问;TreeMap:保持“键”始终处于排序状态,没有HashMap快;LinkedHashMap:保持元素的插入顺序,但也通过散列提供了快速访问能力。
5. Set不接受重复元素。
HashSet:提供最快的查询速度;TreeSet:保持元素处于排序状态;LinkedHashSet:以插入的顺序保存元素。
6. Map与Collection之间的唯一重叠就是Map可以使用entrySet()和values()方法来产生Collection。
Java集合工具包框架图(如下):
参考:
http://www.cnblogs.com/Terry-greener/archive/2011/12/02/2271707.html
http://blog.csdn.net/softwave/article/details/4166598
- Java集合:集合框架
- 【Java】java集合框架
- [Java]Java集合框架
- JAVA集合框架和集合
- 【集合】Java集合框架介绍
- Java集合之集合框架
- [集合]Java的集合框架 Collection集合
- Java集合框架 (一)
- Java集合框架 (二)
- Java集合框架(三)
- Java集合框架
- 也来谈Java集合框架
- 也来谈Java集合框架
- Java集合框架 (一)
- Java集合框架
- 也来谈Java集合框架
- java集合框架
- Java集合框架总结
- 线性表求两个集合的并集
- HZNU-1480-The Gougu Theorem【勾股数】
- 数据结构-顺序环形队列
- Leetcode 169 Majority Element
- IOS学习之——图形上下文
- Java集合框架
- iOS新特性
- Spring MVC 上传文件方式
- 三角形问题该改改
- Adb connection Error:远程主机强迫关闭了一个现有的连接。
- Github 网页上 更新 Fork别人的 Repository
- HDFS原理分析(u)
- 三角00
- Servlet的运行过程