集合——Set
Posted 做个机灵鬼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合——Set相关的知识,希望对你有一定的参考价值。
Set接口
1.set接口的主要实现类有HashSet和 TreeSet
2.HashSet是基于哈希表实现的,数据是无序的, HashSet元素可以是null,但只能有一个null
3.TreeSet是基于二又树实现的,可以实现数据的自动排序,确保集合元素处于排序状态,不允许放
4.HashSet的性能优于TreeSet,一般情况下建议使用 HashSet,如果需要使用排序功能建议使用TreeSet
代码实践:
对象类
import java.util.Objects;
//属性类
public class Cat {
private String name;
private int month;//年龄
private String specise;//品种
//构造方法
public Cat(String name, int month, String specise) {
this.name = name;
this.month = month;
this.specise = specise;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMonth() {
return month;
}
public void setMonth(int month) {
this.month = month;
}
public String getSpecise() {
return specise;
}
public void setSpecise(String specise) {
this.specise = specise;
}
@Override
public String toString() {
return "Cat{" +
"名字='" + name + '\\'' +
", 年龄=" + month +
", 品种='" + specise + '\\'' +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Cat cat = (Cat) o;
return month == cat.month && Objects.equals(name, cat.name) && Objects.equals(specise, cat.specise);
}
@Override
public int hashCode() {
return Objects.hash(name, month, specise);
}
}
实现类
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class CatText {
public static void main(String[] args) {
//定义宠物猫信息
Cat hanghang = new Cat("黄黄",12,"英国短毛猫");
Cat huahua = new Cat("花花",3,"白猫");
//把宠物猫信息放入HashSet类里面
//加入泛型就不用进行强制类型转换
Set<Cat> set = new HashSet<Cat>();
set.add(hanghang);
set.add(huahua);
//利用迭代器对集合进行遍历,输出猫的信息
Iterator<Cat> it = set.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
//添加一个属性相同的猫
//无法添加
System.out.println("************");
System.out.println("添加一个属性相同的猫猫");
Cat huahua01 = new Cat("huahua",3,"白猫");
set.add(huahua);
it = set.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
//插入一个猫的信息
System.out.println("**********");
System.out.println("插入一个猫的信息");
Cat huahua02 = new Cat("花花二代",2,"三花猫");
set.add(huahua02);
it=set.iterator();
while (it.hasNext()){
System.out.println(it.next());
}
//查询一个猫的信息,
//第一种方法,利用对象名去查找
System.out.println("************");
System.out.println("利用对象查找一个猫的信息:");
if(set.contains(huahua)){
System.out.println("花花找到了");
System.out.println(huahua);
}else {
System.out.println("没有找到花花这个猫");
}
//利用名字取查找信息
//并输出这个猫的信息
//利用迭代器进行遍历集合
System.out.println("***********");
System.out.println("利用猫名字去查找信息:");
boolean flag = false;
Cat c=null;
it = set.iterator();
while (it.hasNext()){
//这里需要强制类型转换
c = it.next();
if(c.getName().equals("花花")){
System.out.println("花花找到了");
flag = true;
break;
}
}
//易错点
//这里的输出语句要写在while外面,因为执行break后 就不会输出break后面的语句
if(flag){
System.out.println(c);
}else {
System.out.println("没有找到花花");
}
//删除花花二代 并输出信息
//利用增强for循环
//增强for循环的格式:
//for(数据类型 变量名 :遍历的目标){ //数据类型 变量名:声明一个变量用来接收遍历目标遍历后的元素
/*for(Cat cat:set){
if(cat.getName().equals("花花")){
//此操作只能删除最后一个元素,否者会进行报错,因为Set集合不允许一边遍历一边删除
set.remove(cat);break;
//需添加break结束循环
}
}*/
//把年龄小于5的猫猫全部删除
System.out.println("***************");
System.out.println("删除年龄小于5的猫");
Set set01 = new HashSet();
for(Cat cat:set){
if(cat.getMonth()<5){
set01.add(cat);
}
}
set.removeAll(set01);
for(Cat cat:set){
System.out.println(cat);
}
//删除所有猫的信息
System.out.println("*************");
boolean flag1 = set.removeAll(set);
if(flag1){
System.out.println("猫猫全部删除了");
}else {
System.out.println("猫还在");
}
}
}
以上是关于集合——Set的主要内容,如果未能解决你的问题,请参考以下文章
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段