--------------------------------------Set接口
特点:
1.不允许储存重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
Set集合储存的元素必须重写hashCode方法和equals方法
--------------------------------HashSet集合存储数据的结构(哈希表)
存储数据的结构: 哈希表
哈希表
特点:速度快
本质:数组 + 链表/红黑树(提高查询的速度)
特点:
1.不允许存储重复的元素(通过在类中重写hashCode和equals方法实现去重)
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
3.是一个无序的集合,储存元素和取出元素的顺序有可能不一致
4.底层是一个哈希表结构(查询速度非常快)
------------------------------------哈希值
哈希值是一个十进制的整数,由系统随即给出(就是对象的地址值,是模拟出来得到地址,不是数据实际储存的物理地址)
在Object类有一个方法可以获取对象的哈希值
同一个对象多次调用hashCode()方法返回的哈希值是相同的
不同的hashCode一定来自于不同的对象
public native int hashCode();
native 代表该方法调用的是本地操作系统的方法
------------------------------------------------------LinkedHashSet
java.util.LinkedHashSet extends HashSet
底层是一个哈希表(数组+链表/红黑树+链表) 多了一个链表,记录元素储存顺序,保证元素有序,但依然不可重复
------------------------------------------------------TreeSet
特点:
元素有序, 这里不是指存取的顺序,而是按照一定的规则进行排序,具体的排序方式取决于构造方法:
TreeSet(); 根据其自然排序进行排序
TreeSet(Comparator comparator) 根据指定的比较器进行排序
2.没有带索引的方法,所以不能使用普通for循环遍历
3.由于是Set集合,所以不包含重复元素
------------------------------------------------------泛型
泛型可以看作是一个变量,用来接收数据类型
泛型的本质是参数化类型
ArrayList集合在定义的时候,不知道集合中存储什么类型的数据,所以类型使用泛型
E e elements
当创建集合对象时不使用泛型
定义含有泛型的方法: 泛型定义在方法的修饰符和返回值类型之间
格式
修饰符 <泛型> 返回值类型 方法名(参数列表<泛型>) {
........
}
|
|