Hashset
无序:是添加元素的顺序与元素出来的顺序是不一致的。
Hashset实现原理:往hashset添加元素的时候,hashset会先调用的hashcode方法得到元素的哈希值,然后通过元素的哈希值经过移位等运算,就可以算出该元素在哈希表中的存储位置。
如果算出存储位置分两种情况:
情况一:如果算出元素储存位置目前没有任何元素存储,那么该元素可以直接存储到该位置上
情况二:如果算出该元素在储存位置目前已经存在有其他元素了,那么就会调用该元素的equals方法与该位置的元素再比较一次,如果equals返回时true,那么该元素与这个位置上的元素就视为重复元素,不允许添加,如果equals返回false,那么该元素允许添加。
哈希表的其中一个特点:桶式结构
Hashset:底层是使用了哈希表来支持的,特点:存取速度快
Hashcode默认情况下表示的是内存地址,String类已经重写了object的hashcode方法了
Treeset
Treeset 特点:如果元素具备自然顺序的特性,那么就按照元素自然顺序的特性进行排序存储
Treeset要注意的事项:
1. 往treeset添加元素的时候,如果元素本身具备了自然顺序的特性,那么就按照元素自然顺序的特性进行储存。
2. 往treeset添加元素的时候,如果元素本身不具备自然顺序的特性,那么该元素所属的类必须要实现comparable接口,把元素的比较规则定在comparble(t o)方法上。
3. 如果比较元素的时候,compareto方法返回是0,那么该元素就被视为重复元素,不允许添加(treeset与hashcode.equals方法是没有任何关系的)
4. 往treeset添加元素的时候,如果元素本身没有具备自然顺序的特性,而元素所属的类也没有实现comparable接口,那么必须创建treeset的时候,传入一个比较器
自定义比较器的格式:
Class 类名 implements comparator{
}
5.往treeset添加元素的时候,如果元素本身不具备自然顺序的特性,而元素所属的类已经实现了comparble接口,在创建treeset对象的时候也传入了比较器,那么以比较器的比较规则优先使用的
Treeset储存原理:底层是使用红黑树(二叉树)数据实现的
红黑树储存规则:左小右大,数据小放在左边,数据大的放在右边
Treeset是可以对字符串进行排序的,因为字符串已经实现了comparable接口
情况一
对应位置上有不同的字符出现,比较的就是对应位置上不同的字符
情况二
对应位置上的字符都是一样的,比较的就是字符串的长度