集合(Collection接口)
框架:一这类,这些类协同完成某些功能
集合中的某个类
1)非键值对集合
Set:无序的、不可重复的,访问方式只能用迭代器(iterator()迭代器是一次性用品)
HashSet:底层是用数组实现的,线程不安全的,轻量级的,
排重方式与equals和hashCode有关(默认地址排重)
自定义排重方式,必须重写所用类型的equals和hashCode方法
先调用hashCode方法,返回hashCode值相同,再调用equals方法
(在服务器上即大于4G内存,两个不同的地址在hash算法可以得到相同的hashCode,
所以还得再调用equals方法)
/**
Set e = new HashSet();
e.add(1);//这里的1为基本数据类型,自动封箱成Integer类型对象
e.add("abc");
e.add("def");
e.add("def");//排重
//访问方式
Iteratro it = e.iterator();
while(it.hasNext()){
Object o = it.next();
//Integer i = (Integer)it.next();
//报错,强转必须是强转成数据类型的共同父类
}//迭代器指针到达集合末端
**/
equals方法决定了元素是否可以存入Set中(自定义一般需要重写equals方法) 哈希(杂凑函数,算法--取模,减少冲突;装载因子--0.75) TreeSet:使用于经常需要排序输出的数据结构选择 (自定义类需要实现Comparable接口,重写compartTo方法,自定义排序算法)
List:没有排重功能,没有排序功能,凭下标存取,可重复;new出的实例对象默认长度为10,不限制长度
add(int index,Object object);添加到指定的下标
set(int index,Object object);将指定的下标位置进行修改
实现的机制为数组,适合于查询操作比较多的数据结构选取
ArrayList:不适合于多线程操作,线程不安全,效率高
Vector:多线程安全,效率低
LikedList:实现机制链表,适合于插入删除操作比较多的数据结构选取
2)键值对集合
Map<key,value>:key唯一,value可以出现重复
**key相同是,后一个value覆盖前一个的value
**一个Map有三张视图:
entrySet(包含所有键值对的关系映射)
keySet(生成key集的Set视图)
Collection(value值的集合)
HashMap:不适合于多线程操作,线程不安全的,效率高,方便快速查找
Hashtable:多线程安全,效率低
TreeMap:有序的(默认是以KEY值进行的升序排列)
put元素时,自动调用comparableTo方法,进行比较然后插入