---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
08/05/13 开学的第十四天基础记录:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.集合的补充:
a.分类:collection每个条目(Entry)存放一个对象和Map每个条目存放两个对象(键和值)
b.Collection常用的接口List、Set Queue
c.接口之间继承来实现多继承
如:list继承collection继承Iterable接口 继承都是单继承,接口之间的继承也一样
d.List的条目有序、连续的、可重复的
实现类:ArrayList(线程不安全)元素个数确定,插入删除操作不频繁
LinkedList元素个数不确定插入删除频繁的时候
Vector(线程安全的)与ArrayList是相同的方法
e.Set特点:无序,条目不能重复 ,确定是否相等的方法就是靠比较hashcode相同不相同和equals方法
实现类:HashSet,无序,条目不能重复
TreeSet,有序,条目不能重复
2.哈希表:(随机散列)利用哈希函数n=f(x) 根据对象运算存储的位置
桶 存储 可能发生哈希冲突所以要有哈希冲突解决方案
桶的大小会导致冲突的变化 越小冲突越大
3.哈希表在java中是一个复杂数组;
有个约定只要两个对象相同肯定会让两个对象散列到同一个位置,
同时不是同一个对象也有可能散列到同个地址即哈希冲突
在解决冲突的时候java(HashSet,HashMap,Hashtable)再做个连表在同一个地址上再连上后面进来的对象;
所以使用HashSet的时候一定要保证同一个对象散列到一个地址可以通过覆盖equals和HashCode
4.在使用HashSet的add方法的时候它会按顺序调用hashcode和equals
方法先散列地址然后比较对象有相同的就不存没有相同的就在连表中存储
f.Queue队列:先进先出LinkedList(是个双向的循环列表)也实现了这个接口;
取的时候从头,入的时候从尾进
常用方法:offer();element();peek();poll();remove();
删除的方法是正常的用法,而不删除的是测试队列中是不是有元素
g.Map 的条目是两个对象(key,value)其中的key不能重复
重复的键值存储的时候会覆盖前期存储数据,value可以重复;无序的用hashtable实现的
h.Map 的实现类有:
HashMap线程不安全的所有的方法都没有被同步
Hashtable线程安全的都是线程同步
TreeMap排序的sortMap二叉树实现
i.常用的方法:put(k,v) get(k)其中放元素的时候也要注意
作为key的对象必须也要进行hashCode和equals方法的覆盖
j.Map两种跌代的方式:
一种用keySet()返回键的Set;
一种是用entrySet()返回条目的Set;
这两种跌代的返回类型为Set的原因是想让元素无重复,即符合低层是hashtable的设计
6. 自平衡二叉排序树 TreeMap,TreeSet