标签:重复 计算 定义 dha set 安全 treeset add ash
元素不能重复,无序,Set接口中的方法和collection的方法一样
HashSet:内部实际结构是哈希表,是不同步的。
哈希表:将对象经过哈希算法计算成该对象的哈希值,并把哈希值存放在哈希表中,其实哈希值就相当于数组中的角标。所以在查找的时候直接根据哈希值查询,速度很快。
哈希表确定元素是否相同
u 判断的是两个元素的哈希值是否相同,如果相同,再判断两个对象的内容是否相同
u 判断哈希值相同,其实判断的是对象的hashcode的方法,判断内容相同,用的是equlas方法
注意:如果哈希值不同,是不用判断equals.
Hahset集合数据是哈希表,所以存储元素的时候,使用的元素的hashcode方法来确定位置,如果位置相同,在通过元素的equals来确定是否相同。也就是通过对象的hashcode和equals方法来完成对象唯一性的,如果对象的hashcode值不同,那么不用判断equals方法,就直接存储到哈希表中,如果对象的hashcode值相同,那么要再次判断对象的equals 方法是否为true,如果为true,视为相同元素,不存,如果为false,那么视为不同元素,就进行存储。
记住:如果元素要存储到hashset集合中,必须覆盖hashcode方法和equals方法,一般情况下,如果定义的类会产生很多对象,比如人,学生,数,通常都需要覆盖equlas,hashcode方法。建立对象判断是否相同的依据。
TreeSet:可以对集合中的元素进行排序,是不不同步的,
判断元素唯一性的方式:即使根据比较方法的返回结果是否是0,是0,就是相同的元素,不存,
u Treeset对元素进行排序的方式一:
让元素自身具备比较功能,就需要实现comparable接口,覆盖comparaTo( )方法。如果不要按照对象中具备的自然顺序进行排序,如果对象中不具备自然顺序,怎么办?
u 可以使用treeset集合第二种排序方式二:
让集合自身比较功能,定义一个类实现comparator接口,覆盖compare方法。将该类对象作为参数传递给treeset集合的构造函数。
同步与非同步:
明确具体集合对象名称的后缀,如果后缀是List都所属于List体系,通常是非同步的,如果后缀是Set都所属set体系,通常是非同步的;这些体系的其他子类对象,后缀不是所属接口名的,一般都是同步的。如vector
数据结构:
前缀是数据结构,后缀是所属体系。
ArrayList:看到Array,明确是数组结构,查询快。
需要唯一吗?
需要:set
需要制定顺序吗:
需要:TreeSet
不需要:hashset
但是想要一个和存储一致的顺序(有序):linkedhashset
不需要:list
选要频繁增删吗:
需要:linkedlist
不需要:arraylist
如果记录每一个容器的结构和所属体系呢?
看名字!
List
Arraylist
Linkedlist
Set
Hashset
Treeset
后缀名就是该集合所属的体系。
前缀名就是该集合的数据结构。
看到array:就要想到数组,就要想到查询快,有角标。
看到link:就要想到链表,就要想到增删快,就要想到 add get remove+first last的方法。
看到hash:就要想到哈希表,就要想到唯一性,就要想到hashcode和equals
看到tree:就要想到排序,想到二叉树,就要想到comparable和comparator
通常这些常用的是线程不安全的。
标签:重复 计算 定义 dha set 安全 treeset add ash
原文地址:https://www.cnblogs.com/rookie-10/p/13538438.html