集合框架(JCF)java collections frameworkjava
框架:为了实现某一目的/功能而预先提供的一系列封装好的具备继承或实现关系的类与接口。算法
一、这种框架是高性能的,对基本类集(动态数组、连接表、树、散列表)的实现是高效率的。数组
二、框架必须容许不一样的类集以相同的方式和高度互相操做方式工做。安全
三、类集必须是容易扩展和修改的。框架
为了实现这些目标,类集框架被设计成包含了一组标准接口的类与接口:性能
Collection 是存放一组单值的最大接口。线程
List——列表设计
是Collection的子接口,里面的内容容许重复。code
List的特色:线性。即:有序。元素放入的顺序和元素的存储顺序保持一致。对象
表象上:List最大的特色就是有下标。
ArrayList: 就是做为一个数组的封装出现的,底层就是数组。
LinkedList:底层封装的是一个双向链表。
一、查找、修改用的多的时候用ArrayList。
二、增长、删除用的多的时候(特别是往中间增长、删除)用LinkedList。
三、线程安全,数据量大的时候考虑用vector。
泛型<>:用来控制集合只能操做某一种数据类型。
遍历:一、普通for循环遍历。
二、使用迭代器Iterator完成遍历。——没有下标从头至尾走一遍,不能操做数组。
三、for-each循环语句,底层封装的就是迭代器,语法简单,还能够操做数组。推荐使用。
Set——集
是collection的子接口,里面的内容不容许重复。
特色:不能放置重复元素,无序存放元素。
表象上:Set没有下标。
HashSet判断两元素不重复:一、调用equals方法比较两对象
二、两元素的hashcode值保持一致
只有这两个条件同时知足,java才认为是同一对象。
全部重写了equals方法通常要重写hashcode方法,让equals返回true的时候,hashcode返回的值应该同样。
hashSet只有增、删、求长度和遍历等操做。
遍历:一、迭代器
二、for-each
Map——映射
是存放一对值的最大接口,全部的元素都以键和值的方式存储。
特色:键值对——键要求惟一,值能够重复
经常使用子类:hashMap、properties(专用于操做属性文件)
hashMap
经常使用操做:增、删、改、查、容、遍历
遍历的时候:不能同时遍历全部的键和值,只能单独遍历键与值。
键在遍历的时候用Set类型来接。
值在遍历的时候用Collection来接。
hashMap与hashTable比较:一、hashMap非线性安全,hashTable是线性安全的。
二、hashMap容许null来作键/值,hashTable不容许。
properties
经常使用操做:增、删、查、改、容、存、取。
存的时候,调用的是.store方法存文件,
取的时候,调用.load方法取文件。
文件类型:.properties——固定格式的文本文件,将是工做中使用率第二的配置文件。
Iterator
集合的输出接口,从前到后输出指定集合中的内容。
ListIterator
是Iterator的子接口,能够进行双向输出。
Enumeration
是最先的输出接口,用于输出指定集合中的内容。
collections
集合操做的算法类
包括排序、求最大、最小、反转、随机混排等操做
排序的时候,由于是对对象排序,因此应按必定的业务逻辑的天然顺序排序。
比较器:
comparable接口:内部比较器
可对任意数组排序,java泛型技术,二叉树排序原理
一、类实现comparable接口
二、重写compareTo方法
compareTo方法返回的是int类型数据:1表示大于,-1表示小于,0表示相等。
comparator接口:外部比较器
补救的作法
此接口同样须要重写方法,但方法接收两个对象,返回值依然是一、-一、0;
SortedSet
单值的排序接口,实现此接口的集合类,里面的内容能够使用比较器排序。
SortedMap
存放一对值的排序接口,里面内容按照key排序,使用比较器排序。
Queue
队列接口,此接口的子类能够实现队列操做。
Map.Entry
Map.Entry的内部接口,每一个
Map.Entry对象都保存着一对key——value的内容,每一个map接口中都保存有多个Map.Entry接口实例。
总的来讲:
一、若是要求线程安全,使用Vector、Hashtable。
二、若是不要求线程安全,使用ArrayList(查找、修改较多的时候使用)、LinkedList(删除、增长较多的时候使用)、HashMap(要求键值对映的时候使用)。
三、若是要求键值对应,使用HashMap、HashTable。
四、若是数据量大、又要求线程安全考虑使用Vector。