HashSet集合保证元素唯一性
存入的元素和以前的元素比较哈希值
如果哈希值不同,会继续向下执行,把元素添加到集合
如果哈希值相同,会调用对象的equals()方法比较
如果返回false,会继续向下执行,把元素添加的集合
如果返回true,说明元素重复,不存储
要保证元素唯一性,需要重写hashCode()和equals()
LinkedHashSet集合概述和特点
1 哈希表和链表实现的Set接口,具有可预测的迭代次序
2 由链表保证元素有序,也就是说元素的存储和取出顺序是一致的
3 由哈希表保证元素唯一,也就是说没有重复元素
TreeSet集合特点
1 元素有序:这里的顺序不是指存储和取出的顺序,而是按照一定规则进行排序,具体排序方式取决于构造方法
TreeSet():根据元素的自然排序进行排序
TreeSet(Comparator comparator):根据指定的比较器进行排序
2 没有带索引的方法,所以不能使用for循环遍历
3 由于是Set集合,所以不包含重复元素的集合
泛型
<类型>:制定一种类型的格式,这里的类型可以看做形参
<类型1,类型2,。。。>:指多种类型的格式,多种类型之间用逗号隔开,这里的类型可以看做形参
将来具体调用的时候给定的类型可以看做实参,而且实参的类型只能是引用数据类型
格式:
修饰符 class 类名<类型>{}
泛型方法
格式
修饰符<类型>返回值类型 方法名(类型 变量名){}
类型通配符:<?>
List<?>:表示元素类型未知的List,他的元素可以匹配任何类型
这种带同佩服的List仅表示它是各种泛型List的父类,并不能把元素添加到其中
类型通配符上限:<? extends 类型>
List<? extends Number>:它表示的类型是Number或者其子类型
类型通配符下限:<? super 类型>
List<? super Number>:它表示的类型是Number或者其父类型
可变参数
格式
修饰符 返回值类型 方法名(数据类型...变量名){}
注意事项:
1 这里的变量其实是个数组
2 如果一个方法有多个参数,包含可变参数,可变参数要放到最后
可变参数的使用
Arrays工具类中有一个静态方法
public static <T> List<T> asList(T...a):返回由指定数组支持的固定大小的列表
返回的集合不能做增删操作,可以做修改操作
List接口中有一个静态方法
public static <E> List<E> of(E...elements):返回包含任意数量元素的不可变列表
Set接口中有一个静态方法
public static <E>Set<E> of(E...elements):返回包含一个任意数量元素的不可变集合
Map集合
Interface Map<键的类型,值的类型>
将键具体映射到值的对象;不能包含重复的键;每个键可以最多映射到一个值
创建Map集合的对象
多态的方式
具体的实现类HashMap
Map集合的获取功能
V get(Object key):根据键获取值
Set<K> KeySet():获取所有键的集合
Collection<V> values():获取所有值的集合
Map集合的遍历(方式1)
1 获取所有键的集合,用keySet()方法实现
2 遍历键的集合,获取到每一个键,用增强for实现
3 根据键去找值,用get(Object key)方法实现