皮皮安学习Java第十九天

写在前面

又是一个平平无奇我的周末,平平无奇的我开始写我的Java总结了。
还是照常,总结之前先水几句,最近好像突然像研究一下matlab,也不是为了去参加数学建模,就感觉matlab可以做出好多有意义的事,只不过嘛,同时我还喜欢数据结构和算法、js、jq、bootstrap等等。嗯嗯嗯…慢慢来,现在有时间了,在学Java的空余时间看看这些。日子过的好快呀,转眼间就到这了,也不是过度的苛责自己,是真感觉自己没学的多少,还没能做出个像样的东西,软协的学长该参加大创的参加大创,该参加计设的去参加计设了,要是自己有能力的话,我也想去。好了好了,不水了,看总结。

今日所学

Set
特点:无序 不可重复;
元素顺序与放入顺序无关,不能按索引访问元素。
集合中不允许出现重复的元素。
实现类:HashSet TreeSet

1.HashSet
HashSet是一种哈希算法的集合,以哈希表的形式存储。
数据结构:哈希表,也称哈希散列表。
根据HashCode值进行查找

	特点:操作速度更快,效率更高,根据哈希算法进行快速查找(根据hashCode()方法的返回值,确定其存放的位置)

基本用法:
add() 无序添加,不重复。
Set集合不能按索引访问,因为元素的存储顺序是无序的,不能保证元素与放入的顺序一致,没有索引。
addAll() 将list转换为set

HashSet判断元素是否重复的过程
1.添加元素时首先调用要存入对象的hashCode()方法,获取hashCode()值。
2.根据hashCode()值,使用哈希算法确定在哈希表的存放位置。
3.判断位置是否存在已经有元素
如果该位置没有元素,则直接将元素放入该位置。
如果该位置已有元素。则调用已有对象的equals方法和放入的对象进行比较。
如果返回true,则认为是重要元素,舍弃要放入的元素。
如果返回false,则在当前位置下,以链表的形式追加。

总结:
判断重要的依据,当添加的两个元素的hashCode()的返回值相同,并且equals()返回值为true,则认为重复的相同元素。
向set集合中添加元素时,需要重写hashCode()和equals()方法,防止相同元素被添加到set集合中。

TreeSet
TreeSet是用于对元素进行排序的有序集合类,不允许有重复元素,不保证元素顺序与插入顺序一致。
数据结构:二叉树
特点:元素有大小顺序

TreeSet会对元素进行排序,排序的依据。
		1.元素本身具有自然顺序。
				让对象实现Comparable接口,实现compareTo()方法。
				让对象自身具有可比较性。

		重要compareTo()方法,指定比较的方式。
		升序:如果该对象大于、小于或等于指定对象,则分别返回正整数、负整数、零。
		降序:如果该对象大于、小于或等于指定对象,则分别返回负整数、正整数、零。

	TreeSet判断重复的依据,当添加的两个元素的compareTo()返回值为0,则认为是相同的元素。

	2.提供一个比较器,根据比较器进行排序。
	定一个比较器,实现comparator接口的类,实现compare()方法。

	在创建TreeSet时传入比较器。

猜你喜欢

转载自blog.csdn.net/qq_46178251/article/details/106749700