Collection
作为 容器的父接口
collection 允许有重复的元素
两种子接口:
Set子接口:无序的不可重复,包含子类(HashSet)
Lis子接口:有序的可重复,包含(ArrayList,LinkList)
容器可以存储任意类型的数据
只能存储引用数据类型的数据,自动装箱
容器类对象:
Collection<> col=new ArrayList();
<>中可以加入数据类型如String,表示规定容器中所有数据的数据类型,提高稳定性和可读性,称为泛型
遍历方法:
增强for,
迭代器(Iterator it=col.iterator());
- 获取迭代某一个容器的迭代器对象
- 判断是否存在下一个可迭代的元素 hasNext() ->true,false
- 返回下一个元素 next() ->下一个元素
List:
ArrayList
有序可重复,有索引
新增了一些根据索引操作的方法
List list=new ArrayList();
遍历方法:
普通for,增强for,迭代器,ListLterator
LinkedList:
底层:双向链表实现
优点:增删效率高
缺点:查询或随机获取效率低
新增方法:新增了一些操作与链表头和链表尾的功能(见名知意的方法使用)
创建对象:
LinkedList list=new LinkedList();
Set:
无序的不可重复的,null值只能存在一个
没有新增方法,与Collection中功能相同
创建对象:
Set set=new HashSet();
遍历:
1.增强for
2.迭代器
HashSet:
底层:有HashMap维护的
底层:由哈希表结构存储(数组+链表+红黑树)
优点:查询,增加,删除效率较高
缺点:无序
扩容:默认初始容量16,加载因子0.75 ,扩容是原容量的2倍
创建对象:
HashSet set=new HashSet();
HashSet存储引用数据类型去重:
①需要重写hashCode()方法和equals()方法进行自定义类型去重(shift+alt+s内)
② 如果不重写hashCode(),可以遇到没有equals方法这一步就医过滤掉不是相同的对象了,直接存储,不会equals方法比较
注:
①hashCode()相同的对象有可能相同可以不相同,进一步比较equals()
②hashCode()不相同的对象肯定不相同,过滤掉一写不相同的对象,不需要进一步比较equals方法效率较高
TreeSet :
是由TreeMap维护的
底层:红黑树结构实现
优点:默认升序排序(默认自然排序|指定排序)
缺点:没有HashSet效率高
创建对象:
TreeSet tree=new TreeSet();
存储引用数据类型的时候(引用数据类型对象的排序,引用数据类型对象的去重):
引用数据类型1)实现内部比较器 2)自定义外部比较器