集合Collection
Collection:是一个接口.定义了集合相关的抽象方法.
Collection下面有两大子接口:List与Set
集合中可以保存任意类型实例(集中中每个元素是任意类型实例)
但一般而言,一个集合中的元素类型应该是一致的,否则容易造成
混乱.
List:元素[有序]且[可以重复添加]
Set :元素[无序]且[不可以重复添加]
线性表:List
ArrayList:List的实现类.
ArrayList使用Object[]实现保存元素.
ArrayList:Object[] + 线性表操作(增删改查)
Vector:使用方式与ArrayList一样.
Vector也实现了List接口
ArrayList在java1.2以后出现
ArrayList 线程不安全
Vector 线程安全
List下另一个比较常用的实现类:LinkedList
LinkedList:链表(采用双向循环链表实现)
API用法基本与ArrayList一样
addFirst(Object o):add(0,Object o)向第一位追加元素
addLast(Object o):add(Object o)
removeFirst():
removeLast():
散列表
容量: 散列表中散列数组的大小
散列运算: key的hashCode值进行的运算
散列桶: 散列值相同的元素的线性集合
加载因子: 散列数组的加载率,一般要求小于75%.
元素数量/散列数组大小
散列查找: 根据key的hashCode值进行计算,计算散列表下标
从而找到对应元素
HashMap
HashMap是以key-value的形式存放数据的
key:可以是任意对象
value:可以是任意对象
key与value成对保存,在HashMap中以Entry对象保存
key不允许重复!若以相同的key存放value,视为替换操作
根据key进行散列计算(计算key的hashCode值得到散列数组下标)
元素按照散列值进行排序(透明不可见).
HashMap的默认容量为16.加载因子为0.75
一旦我们存入的数据超过加载因子比值,HashMap会对散列数组进
行扩容.以保证加载因子比值,提高查询效率
Set集合
Collection的另一个子接口.
Set集合特点:无序且元素不可重复添加
常用实现类:HashSet
HashSet:使用HashMap实现,其实就是使用HashMap的key列保存
HashSet的元素.是一个只有key值的HashMap
=======================================================
链表结构
链表结构,在链表中保存的每一个元素都应该是链表的一个"节点"
节点连接节点组成的样子很像现实中的"链子",所以称之为链表
单向链表:每个节点都知道它的下一个节点,不知道上一个节点.
双向链表:每个节点即知道下一个节点也知道上一个节点.
双向循环链表:在双向链表的基础上,将头节点与尾节点相连.形成
一个封闭的链表
那么在链表中,节点Node类应保存至少两个属性.一个是其连接的
其他节点的地址,与当前节点需要保存的元素
==========================================================
泛型
泛型是java1.5以后出现的新特性.作用是在编译器检查元素类型
约束(运行期间不检查)
=========================================================
集合的迭代
集合的迭代是对集合元素的一种遍历算法
java中使用Iterator(迭代器)来描述迭代模式操作
Iterator中的迭代方法是专门为while循环设计的
Iterator实例可以通过任何的[集合对象]获取.
集合对象:Collection的子类对象
迭代方法:
next():移动游标到下一个元素,并返回它
hasNext():检查当前集合中是否还有元素,若有返回true否则
返回false
迭代器中的游标:
迭代器实际上就是集合的元素序列视图.它还包含一个游标,
游标默认指向视图第一个元素之前.
=========================================================
Collections 集合工具类
与数组的工具类Arrays类似,Collections提供了对集合操作的一
写比较便捷的方法.
========================================================
Comparable和Comparator
Comparable是一个接口,实现了此接口的类是可比较的.
实现此接口必须要实现其中的一个抽象方法:CompareTo()
CompareTo()方法返回一个int值,这个值的没有具体数值,
只要描述范围就可以:整数表示大,负数表示小,0表示相等
CompareTo()方法在比较时,应注意与equals()方法呼应,
就是equals()方法返回true时,CompareTo()方法要返回0
java中很多的类都实现了这个接口,例如String
Comparator比较器
Comparator也是一个接口.需要实现一个抽象方法compare().
Comparator经常伴随着Collections的sort方法使用.
Collections的sort()方法
sort(List list):按照List元素的升序排序
sort(List list,Comparator com):根据比较器的规则比较
List中的元素.升序排序