1.2 Set
1. Set接口和方法
举例
代码示例
package com.baidu.www;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Set<Student> set = new HashSet<>();
Student s1 = new Student(12);
Student s2 = new Student(23);
Student s3 = new Student(22);
Student s4 = new Student(56);
Student s5 = new Student(12);
set.add(s1);
set.add(s2);
set.add(s3);
set.add(null);
set.add(s4);
set.add(s5);
/**
* Set集合保证元素的唯一性依赖两个方法:equals() 和 hashCode()
* 没有在 Student类中重写这两个方法,默认调用的是 Object 类中的这两个方法
* 而 Object类中的 equals方法默认比较的是地址值是否相同
*
* 解决方案:
* 在 Student类中重写 equals()方法 和 hashCode()方法
*/
System.out.println(set);
System.out.println("======通过迭代器遍历======");
// 通过迭代器遍历set集合
Iterator<Student> it = set.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
System.out.println("======通过增强for遍历======");
// 通过增强for遍历set集合
for (Student student : set) {
System.out.println(student);
}
}
}
2. HashSet
底层机制
链表个数达到8,则扩容到32,然后扩容到64,然后10个链表元素进行红黑树的转化。
示例代码
package com.baidu.www;
import java.util.HashSet;
public class HashSet_ {
public static void main(String[] args) {
HashSet hashSet = new HashSet();
hashSet.add("java");
hashSet.add("php");
hashSet.add("java");
for (int i = 0; i < 100; i++) {
hashSet.add(i);
}
System.out.println(hashSet);
}
}
3. LinkedHashSet