Java三大集合(二):Set

Set:表示无序(存入和取出)不可重复集合,可以保存null元素
接口下:HashSetTreeSetLinkedHashSet

================================================================

HashSet:基于HashMap,底层是键值对+链表+红黑树(jdk1.8之后)
初始长度:16,负载因子:0.75

判断重复的机制:hashcode()—>equals()

  1. 先判断元素的hashCode值
  2. 在hashCode相等的情况下,继续判断equals比较,如果都相等认为是同一个元素

==============================================================

LinkedHashSet:是一个有序的HashSet,在HashSet基础上维护了一个链表

==============================================================

TreeSet:基于TreeMap,TreeMap底层基于红黑树(是特殊的二叉树,左边叉值小,右边叉值大,有自平衡机制)

  1. 自然排序:元素类型必须实现了Comparable接口,且必须重写compareTo()方法
    返回值 正数:升序
    返回值 负数:降序
    返回值0:相同的元素,就不会添加了

  2. 定制排序:在创建TreeSet对象的时候,传入一个Comparator接口的实现类,该实现类必须重写compare方法
    返回值 正数:升序
    返回值 负数:降序
    返回值 0:相同的元素

注意事项:
1、当自然排序和定制排序同时使用,定制排序优先级更高
2、一般情况下,默认排序用自然排序,特殊排序用定制排序

==========================================================

因为Set是无序、无下标,所以只有foreach和单向迭代器这两种遍历方式

		//1、foreach
		for (Object object : hashSet) {
    
    
			System.out.println(object);
		}
		
		//单向迭代器
		Iterator iterator = hashSet.iterator();
		while (iterator.hasNext()) {
    
    
			Object object = (Object) iterator.next();
			System.out.println(object);
		}

猜你喜欢

转载自blog.csdn.net/ExceptionCoder/article/details/107631948