【set集合】
set集合
1.迭代器的remove方法与集合的remove的区别?
2.array与ArrayList的区别
3.ArrayList与Linkedlist的区别
4.list集合去重及其底层原理
5.集合框架Set(HashSet哈希表存储、重复元素存储底层探究)
6、集合框架TreeSet
1.迭代器的remove方法与集合的remove的区别?
只需要了解迭代器在内存的运行,指针,迭代器与集合是两个对象,如果说在迭代器中调用集合
中的remove方法,会报currentModifyException
2.array与ArrayList的区别
array长度固定,ArrayList反之
array一旦声明,只能放该类型的对象
3.ArrayList与Linkedlist的区别
数据结构
ArrayList的数据结构是数组存储,造成了查询速度快,增删慢,线程不同步
Linkedlist的数据结构是链表存储,造成了增删快,查询慢 (vector:线程同步)
使用Linkedlist完成堆栈以及队列的存储空间的定义
4.list集合去重及其底层原理
对象重复是指对象里面的变量的值都相等,并不定是地址。list集合存储的类型是基础类型还比较好办,直接把list集合转换成set集合就会自动去除。
当set集合存储的是对象类型时,需要在对象的实体类里面重写public boolean equals(Object obj) {} 和 public int hashCode() {} 两个方法
由图可以看到只添加了一个aaa。
5.集合框架Set(HashSet哈希表存储、重复元素存储底层探究)
(一)HashSet的底层数据结构是哈希表
(二)确保元素唯一性的两个方法,hashCode()和equals()方法。
(三)当调用add()方法向集合中存入对象的时候,先比较此对象与原有对象的哈希值有没有一样的,如果都不一样就直接存入;如果有与之相同的哈希值,则要继续比较这两个对象是否为同一个对象,此时就要调用对象的equals()方法了。
6、集合框架TreeSet
TreeSet自然排序
TreeSet可以对set集合中元素进行排序,String实现了Comparable接口,所以可以直接进行排序,引用数据类型想要排序,必须实现Comparable接口,其他引用数据类型没有实现Comparable接口,那么会出现java.lang.ClassCastException: com.javaxl.Peroon cannot be cast to java.lang.Comparable,实现引用数据类型实现此接口就没问题了。注意:排序时,当主要条件相同时,一定要判断次要条件。
TreeSet是SortedSet接口的实现类,TreeSet可以保证了集合元素处于排序状态(所谓排序状态,就是元素按照一定的规则排序,比如升序排列,降序排列)。
与HashSet集合相比。
Comparator comparator():如果TreeSet采用了定制排序,则该方法返回定制排序所使用的Comparator,如果采用了自然排序,则返回null。
Object first(): 返回集合中的第一个元素。
Object last():返回集合中的最后一个元素。
Object lower(Object e):返回集合中位于指定元素e之前的元素(即小于指定元素的最大元素,参考元素e不必是集合中的元素)。
Object higher(Object e): 返回集合中位于指定元素e之后的元素(即大于指定元素的最小元素,参考元素e不必是集合中的元素)。
SortedSet subSet(Object fromElement, Object toElement): 返回集合中所有在fromElemt和toElement之间的元素(包含fromElent本身,不包含toElement本身)。
SortedSet headSet(Object toElement): 返回此set的子集,由小于toElement的元素组成。
SortedSet tailSet(Object fromElement):返回此set的子集,由大于或等于fromElement的元素组成。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法:hashCode与equals方法来完成;
如果hashCode值相同,才会判断equals是否为true;
如果hashCode值不同,那么不会调用equals。
注意:对于判断元素是否存在,以及删除等操作,依赖的方法同样是hashCode、equals方法。
7.集合框架TreeSet(自然排序、比较器排序)
自然排序(Comparable):
使得添加的元素自身具备排序规则,这种排序规则又被称为自然排序
比较器排序(Comparator):
作用:使得容器具有比较性
例举比较器排序:
泛型简介
泛型简单来说就是程序设计语言的一种特性,各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。
泛型的作用:
1.将运行时的异常转移到编译器
2.提升了代码的健壮性