Set
一、学习框架
二、set特点
如输出结果可知
set具有无序性和不可重复性
三、set遍历方式
foreach遍历和迭代器遍历
package com.daihuimei.set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
* 特点:
* 不可重复
* 无序
* @author T440s
*
*/
public class Dhm1 {
public static void main(String[] args) {
Set<Object> set=new HashSet<>();
// set.add("小呆一号");
// set.add("小呆二号");
// set.add("小呆三号");
// set.add("小呆四号");
// System.out.println(set);
set.add(new student("小呆一号", 19));
set.add(new student("小呆", 39));
set.add(new student("小", 29));
// foreach 遍历
for (Object o : set) {
System.out.println(o);
}
System.out.println("----------------");
// 迭代器遍历
Iterator<Object> it=set.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
四、HashSet哈希表存储,重复元素存储底层探究
set集合调用HashCode与equals两种方法
set集合去重原理:
hashset底层数据结构是哈希表
优先会调用hashcode方法对比地址
然后调用equals方法对比值
当存在HashCode与equals两种方法时
运行结果如:
当存在equals方法,HashCode方法返回值为0时
运行结果如:
五、Tree(自然排序&比较排序)
相比于比较排序灵活性差,比较排序能脱离数据库脚本对数据进行操作
1、自然排序
代码如下:
package com.daihuimei.set;
import java.util.Set;
import java.util.TreeSet;
/**
* 自然排序
* @author T440s
*
*/
public class Dhm3 {
public static void main(String[] args) {
Set<user> set=new TreeSet<>();
set.add(new user("aa", 13000));
set.add(new user("aa", 23000));
set.add(new user("aa", 8000));
set.add(new user("aa", 19000));
for (user user : set) {
System.out.println(user);
}
}
}
class user implements Comparable{
private String name;
private int money;
@Override
public String toString() {
return "user [name=" + name + ", money=" + money + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public user(String name, int money) {
super();
this.name = name;
this.money = money;
}
public user() {
super();
// TODO Auto-generated constructor stub
}
@Override
public int compareTo(Object arg0) {
user u=(user) arg0;
return this.money-u.money;
}
}
2、比较排序
代码如下:
(根据工资排序)
package com.daihuimei.set;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;
/**
* 比较排序
* @author T440s
*
*/
public class Dhm4 {
public static void main(String[] args) {
Set<user> set=new TreeSet<>(new Comparator() {
public int compare(user o1, user o2) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
return ((user) o1).getMoney()-((user) o2).getMoney();
}
});
set.add(new user("aa", 13000));
set.add(new user("bb", 23000));
set.add(new user("vv", 8000));
set.add(new user("cc", 19000));
for (user user : set) {
System.out.println(user);
}
}
}
/**
* 按照输入升序的规则
* @author T440s
*
*/
//class MoneyAsc implements Comparator<user>{
// @Override
// public int compare(user o1, user o2) {
// // TODO Auto-generated method stub
// return o1.getMoney()-o2.getMoney();
// }
//}
class users{
private String name;
private int age;
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;
}
@Override
public String toString() {
return "user [name=" + name + ", age=" + age + "]";
}
public users(String name, int age) {
super();
this.name = name;
this.age = age;
}
public users() {
super();
// TODO Auto-generated constructor stub
}
}
根据名字首字母先后排序:
Set<user> set=new TreeSet<>(new Comparator() {
public int compare(user o1, user o2) {
// TODO Auto-generated method stub
return 0;
}
@Override
public int compare(Object o1, Object o2) {
String name=((user) o1).getName();
String name1=((user) o2).getName();
return name.compareTo(name1);
}
});