1.Set集合
1.1Set集合概述和特点
-
Set集合的特点
1.元素存取无序
2.没有索引,只能通过迭代器或增强for循环遍历
3.不能存储重复元素(有条件) -
Set集合的基本使用
public class SetDemo {
public static void main(String[] args) {
//创建集合对象
Set<String> set = new HashSet<String>();
//添加元素
set.add("hello");
set.add("world");
set.add("java");
//不包含重复元素的集合
set.add("world");
//遍历
for(String s : set) {
System.out.println(s);
}
}
}
1.2哈希值
-
哈希值简介
是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值 -
如何获取
Object类中的public int hashCode();返回对象的哈希码 -
哈希值的特点:
1.同一个对象多次调用hashCode()方法返回的哈希值是相同的
2.默认情况下,不同对象的哈希值是不同的 而重写hashCode()方法,可以实现让不同对象的哈希值相同
1.3HashSet存储元素的原理
当往HashSet集合中存储元素的时候,会先计算元素的hashCode值(每一个对象的hashCode值默认不一样)
- 如果hashCode值和已元素的hashCode值不同,则会直接存储到集合;
- 如果hashCode值相同,还会使用equals方法判断元素的内容是否相同
如果hashCode相同,equals比较内容相同,则认为元素重复,不存储。
如果hashCode相同,equals比较内容不同,则认为元素不重复,存储到集合
1.4HashSet
- 特点:
1.底层数据结构是哈希表
2.对集合的迭代顺序不作任何保证,也就是说不保证存储和取出元素顺序一致
3.没有带索引的方法,所以不能使用普通for循环遍历
4.由于是Set集合,所以不包含重复元素
1.5LinkedHashSet集合概述和特点
- LinkedHashSet集合特点
1.哈希表和链表实现Set接口,具有可预测的迭代次序
2.由链表保证元素有序,即存储和取出顺序是一致的
3.由hash表保证元素唯一,也就是没有重复元素
2.Set集合排序
2.1TreeSet集合概述和特点
- 概述:
1.元素有序,可以按照一定规则进行排序,具体排序方式取决于构造方法
TreeSet():根据其元素的自然排序进行排序
TreeSet(Comparator comparator):根据指定比较器进行排序
2.没有带索引方法,不能用普通for遍历
3.不包含重复元素 - 基本使用
//创建集合对象
TreeSet<Integer> ts = new TreeSet<Integer>();
//添加元素
ts.add(10);
ts.add(40);
ts.add(30);
ts.add(50);
ts.add(20);
ts.add(30);
//遍历集合
for(Integer f : ts) {
System.out.println(f);
}
2.2自然排序Comparable的使用
TreeSet可以对集合中的元素进行排序,在添加元素的时候会自动去调用Comparable接口的compareTo方法
比如String和Integer本身就具备排序规则