一.set集合
目录
- 1.介绍
- 2.特点
- 2.1无序性就代表着集合里面的元素没有固定的下标,所以就说在集合中 set集合没有修改的方法
- 2.2不可重复 元素不可重复集合的元素具有唯一性
- 2.3集合最基本操作:增加,删除,查看 ,修改(无)
- 2.3.遍历方式
- 2.3.1foreach
- 2.3.2迭代器
- 3.set集合去重原理
- 4.set集合排序
2.1.set集合介绍
理解:是一种容器,用来存储数据;就好像你的书包,用来装书
2.2.set集合特点:
a..无序性 (就代表着集合里面的元素没有固定的下标,所以就说在集合中 set集合没有修改的方法)
b.不可重复 (元素不可重复集合的元素具有唯一性)
2.3.集合最基本操作:增加,删除,查看 ,修改(无)
package com.lz.set; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class demo1 { public static void main(String[] args) { Set set=new HashSet<>(); //增加 set.add("q"); set.add("dsf"); set.add("dsfg"); set.add("dsfg"); //删除 set.remove("q"); //查看 System.out.println(set); } }
效果图:
3.遍历方式
a.foreach
for (Object object : set) { System.out.println(object); }
效果图:
b.迭代器
b.迭代器
Iterator iterator = set.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
效果图:
二.set集合去重原理
1..contains 是否能够判断含有某个对象
企业使用: 在实现外部接口进行 数据导入为了解决数据重复的问题
去重原理:
HashSet去重
先执行 hashcode 比较hashcode值 (前提是hashcode值相同才调用)equals方法 在比较 equals返回值值
a1.对象去重
package com.lz.set; import java.util.HashSet; import java.util.Set; public class demo2 { public static void main(String[] args) { Set set=new HashSet<>(); //对象 set.add(new stu(1, "阿达")); set.add(new stu(2, "圣诞节")); set.add(new stu(3, "斯蒂芬")); System.out.println(set.contains(new stu(3, "斯蒂芬"))); } } class stu{ private int id; private String name; /** * @return the id */ public int getId() { return id; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } public stu(int id, String name) { super(); this.id = id; this.name = name; } public stu() { super(); } /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "stu [id=" + id + ", name=" + name + "]"; } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { System.out.println("hashcode加载中"); final int prime = 31; int result = 1; result = prime * result + id; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; // return (int) (Math.random()*100000000); } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { System.out.println("equals加载中"); if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; stu other = (stu) obj; if (id != other.id) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } }
a2.字符串
Set set=new HashSet<>(); //增加 set.add("q"); set.add("dsf"); set.add("dsfg"); set.add("dsfg"); //字符串 System.out.println(set.contains("q"));
三set集合排序
package com.lz.set; import java.util.Comparator; import java.util.HashSet; import java.util.Set; import java.util.TreeSet; public class demo3 { public static void main(String[] args) { Set set=new HashSet<>(); set.add(new Person(1, "lz",100)); set.add(new Person(2, "zx",137)); set.add(new Person(3, "ho",127)); /** * 默认排序 */ for (Object object : set) { System.out.println(object); } //数据加工 TreeSet ts=new TreeSet<>(); // 将hashset拆除的数据放在 treeset中 for (Object object : set) { ts.add(object); } for (Object object : ts) { System.out.println("默认数据"+object); } System.out.println("------------------"); /** * 根据一点规则排序 Comparable:自然排序接口 */ TreeSet tsmax=new TreeSet<>(new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { // TODO Auto-generated method stub return o2.getMoney()-o1.getMoney(); } }); // 将hashset拆除的数据放在 treeset中 for (Object object : set) { tsmax.add(set); } for (Object object : tsmax) { System.out.println("加钱 "+tsmax); } System.out.println("--------"); /** * Comparator:比较器排序接口 根据需求 */ TreeSet tsvip=new TreeSet<>(new Comparator<Person>() { @Override public int compare(Person o1, Person o2) { int num=o2.getMoney()-o1.getMoney(); if (num==0) { return o1.getId()-o2.getId(); } return o2.getMoney()-o1.getMoney(); } }); // 将hashset拆除的数据放在 treeset中 for (Object object : set) { tsvip.add(set); } for (Object object : tsvip) { System.out.println("加钱 "+tsvip); } } } //模拟数据传入 class Person implements Comparable<Person>{ private int id; private String name; private int money; /* (non-Javadoc) * @see java.lang.Object#toString() */ @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", money=" + money + "]"; } public Person() { super(); } public Person(int id, String name, int money) { super(); this.id = id; this.name = name; this.money = money; } /** * @return the id */ public int getId() { return id; } /** * @param id the id to set */ public void setId(int id) { this.id = id; } /** * @return the name */ public String getName() { return name; } /** * @param name the name to set */ public void setName(String name) { this.name = name; } /** * @return the money */ public int getMoney() { return money; } /** * @param money the money to set */ public void setMoney(int money) { this.money = money; } @Override public int compareTo(Person arg0) { // TODO Auto-generated method stub return this.id -arg0.id; //倒叙 arg0.id - this.id; } }