一、Set集合特点
(1).元素无序
//实例化Set集合
Set set = new HashSet();
//给集合添加数据
set.add("刘德华");
set.add("郭富城");
set.add("黎明");
set.add("张学友");
//遍历的方式 无下标 foreach
for (Object object : set) {
//控制台打印
System.out.println(object);
}
注: 因为Set集合所添加数据无下标,所以不用for循遍历
控制台打印效果:
(2).元素不能重复
//实例化Set集合
Set set = new HashSet();
//给集合添加数据
set.add("刘德华");
set.add("郭富城");
set.add("黎明");
set.add("张学友");
//Set集合的特点 2.元素不能重复
set.add("刘德华");
//遍历的方式 无下标 foreach
for (Object object : set) {
//控制台打印
System.out.println(object);
}
控制台打印效果:
(3)、Set集合遍历方式
1.foreach循环遍历
2.迭代器遍历
//实例化迭代器
Iterator iterator = set.iterator();
//while循环遍历
// iterator.hasNext():指的是存在下一个元素就循环遍历
while(iterator.hasNext()) {
//获得元素对象
Object object = iterator.next();
//控制台打印
System.out.println(object);
}
二、Set集合框架的实现类
(1).TreeSet : 根据Ascll码对里面的元素进行排序
//实例一个Set集合框架的实现类TreeSet
Set set = new TreeSet();
//给Set集合框架添加元素
set.add("a");
set.add("b");
set.add("d");
set.add("c");
set.add("e");
//foreach循环遍历
for (Object object : set) {
//控制台打印
System.out.println(object);
}
控制台打印效果:
注释: 该程序本质是根据Ascll码对里面的元素进行排序
Ascll码对照表:
三、Set集合中比较器的运用
列如:
(1)、先敲一个实体类(User)用户类
package com.zking.collection;
import java.io.Serializable;
//实现Serializable接口与比较器
public class User implements Serializable,Comparable<User>{
//防止序列化与反序列化异常
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;//用户id
private String name;//用户姓名
private String sex;//用户性别
//封装方法
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public User() {
// TODO Auto-generated constructor stub
}
public User(int id, String name, String sex) {
this.id = id;
this.name = name;
this.sex = sex;
}
public User(String name, String sex) {
this.name = name;
this.sex = sex;
}
//重写toString方法
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", sex=" + sex + "]";
}
//重写比较器方法
@Override
public int compareTo(User o) {
/*int n = this.getId()-o.getId();*/
//int n = this.getName().hashCode()-o.getName().hashCode();
int n = 0;
return n;
}
}
(2)、在敲一个比较器(以下代码是根据ID排序 )
import java.util.Comparator;
//实现比较器接口
public class IdComparator implements Comparator<User> {
//重写比较器的方法
@Override
public int compare(User o1,User o2) {
//相当于排序,同时增加
if(o1.getId()-o2.getId()>0) {
return 100;
}
else if(o1.getId()-o2.getId()<0) {
return -100;
}
else {
//返回0代表学号相同,不往集合增加元素
return 0;
}
}
}
(3)、功能实现类
import java.util.Set;
import java.util.TreeSet;
public class Demo03 {
public static void main(String[] args) {
//括号里的是比较器
Set<User> set = new TreeSet<User>(new IdComparator());
//往集合里加元素
set.add(new User(4, "罗牛", "娘"));
set.add(new User(4, "罗牛马", "母"));
set.add(new User(3, "罗马", "妖"));
set.add(new User(5, "罗马", "妖"));
//foreach循环遍历
for (User user : set) {
//控制台打印
System.out.println(user);
}
}
}
(4)、控制台打印效果
注: id为4的并且Ascll码比较小的未显示在控制台