一:Set集合的特点以及遍历方式
1.Set集合的基本特点
- 容器中是不会出现重写的元素
- set相对于List集合,是没有下标的
2.遍历方式
3.案列
package com.zhongshun.set;
import java.util.HashSet;
import java.util.Iterator;
public class Demo1 {
public static void main(String[] args) {
定义一个String类型的Set数组
HashSet<String> set = new HashSet<>();
增加
set.add("张三");
set.add("李四");
set.add("老六");
set.add("张三")
遍历set集合两种方法
fore 增强for
for (String sa : set) {
System.out.println(sa);
}
迭代器
Iterator<String> it = set.iterator();
if(it.hasNext()) {
System.out.println(it.next());
}
}
}
二:Set集合的去重原理
1.set集合底层去重原理
- hashSet底层,与hashcode,equals方法相关
- 是优先对比hashcode值在对比equals值,当hashcode值相同,并且equals返回值为true,则认定重复元素
2.1.hashcode值不同,就不会调用equals方法进行比较了
2.2.hashcode值相同,才会调用equals方法(
三:自然排序接口及比较器接口
集合排序
- treeset相较于hashset是可以进行排序的
- treeSet中的元素想要排序,那么必须实现java.lang.Comparable接口
案例
package com.zhongshun.set;
import java.util.Comparator;
import java.util.TreeSet;
public class Demo3 {
public static void main(String[] args) {
TreeSet<person> set =new TreeSet<>((x,y)->x.getAge()-y.getAge());
person p1= new person("张三", 11,7000);
person p2= new person("李四", 28,9000);
person p3= new person("王五", 22,4000);
set.add(p1);
set.add(p2);
set.add(p3);
for (person ps : set) {
System.out.println(ps);
}
}
}
class person implements Comparable<person>{
private String name;
private int age;
private float salary;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public float getSalary() {
return salary;
}
public void setSalary(float salary) {
this.salary = salary;
}
@Override
public String toString() {
return "person [name=" + name + ", age=" + age + ", salary=" + salary + "]";
}
public person(String name, int age, float salary) {
super();
this.name = name;
this.age = age;
this.salary = salary;
}
public person() {
}
@Override
public int compareTo(person o) {
return (int) (this.salary - o.salary);
}
}