杰神之Java集合中的Set(懒人版)

编程入门 行业动态 更新时间:2024-10-28 09:24:55

杰神之Java集合中的Set(<a href=https://www.elefans.com/category/jswz/34/1741988.html style=懒人版)"/>

杰神之Java集合中的Set(懒人版)

Set

今天博主太累了,不想分类了,例子都在里面,内容都在注释上,自己瞅吧
今天例子用到的类:


public class Person {private String name;private int age;public Person() {super();// TODO Auto-generated constructor stub}public Person(String name, int age) {super();this.name = name;this.age = 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;}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "名字:"+name+" 年龄"+age;}//之后使用系统自动生成的hashCode和equals方法@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)//如果两个对象地址一样return true;//返回trueif (obj == null)//如果传进来的对象是nullreturn false;//返回falseif (getClass() != obj.getClass())//如果两个对象不是一个类创建出来的return false;               //就返回falsePerson other = (Person) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))//使用字符串类的比较return false;return true;}//  @Override
//  public boolean equals(Object obj) {
//      // TODO Auto-generated method stub
//      Person person =(Person)obj;
//      return this.name.equals(person.getName())&&this.age==person.getAge();
//  }
//  //重写hashCode方法
//  //Set集合在进行存储的时候
//  //当hashCode值相同时 
//  //会调用equals方法 进行对比 是同一个对象就不存
//  //当hashCode不同时,没有调用equals方法
//  @Override
//  public int hashCode() {
//      // TODO Auto-generated method stub
//      return this.age;
//  }
}
public class Worker extends Person implements Comparable<Worker>{public Worker() {super();// TODO Auto-generated constructor stub}public Worker(String name, int age) {super(name, age);// TODO Auto-generated constructor stub}//实现接口中的唯一方法/** 返回0时  set中只有一个元素* 1(正数)  按存进去的顺序正序打印* -1(负数) 按存进去的顺序倒序打印* * TreeSet 按二叉树保存* 要保存的数比我小 放在我左边(返回负数)* 要保存的数比我大 放在我右边(返回正数)* 要保存的数一样大 不保存* 打印按从小到大打(正序)* * 使用TreeSet排序的步骤* 1.让TreeSet集合中保存的对象 实现Comparable接口* 2.实现compareTo方法* 3.在compareTo方法中 实现 你要排序的规则*///按年龄排序
//  @Override
//  public int compareTo(Worker o) {
//      // TODO Auto-generated method stub
//      return this.getAge()-o.getAge();
//  }
//  //比较的主要条件 按年龄//     次要条件 按姓名
//  @Override
//  public int compareTo(Worker o) {
//      // TODO Auto-generated method stub
//      if (this.getAge()-o.getAge()!=0) {
//          return this.getAge()-o.getAge();
//      } else {
//          return this.getName()pareTo(o.getName());
//      }
//      //三目运算符版本
//      return this.getAge()-o.getAge()!=0 ?this.getAge()-o.getAge():this.getName()pareTo(o.getName());
//  }@Override//先比字符串长度 再比年龄 再比字符串public int compareTo(Worker o) {// TODO Auto-generated method stubreturn this.getName().length()-o.getName().length()!=0?this.getName().length()-o.getName().length():this.getAge()-o.getAge()!=0 ?this.getAge()-o.getAge():this.getName()pareTo(o.getName());}
}

应用:


/** Set(接口)* 无序(无下标) 不重复*/
public class Demo01 {public static void main(String[] args) {//fun1();//fun2();//fun3();//fun4();//fun5();//利用set集合 去除ArrayList集合中的重复元素 a a b b c c d dArrayList<String> list =new ArrayList<>();list.add("a");list.add("a");list.add("b");list.add("b");list.add("c");list.add("c");list.add("d");list.add("d");LinkedHashSet<String> set=new LinkedHashSet<>();set.addAll(list);list.clear();list.addAll(set);System.out.println(list);}/*** */public static void fun5() {//输入一个字符串 去掉其中重复字符 wlznbwlznb-->wlznbString string="wlznbwlznb";char[] charArray = string.toCharArray();LinkedHashSet<Character> set=new LinkedHashSet<>();for (char c : charArray) {set.add(c);}System.out.println(set);}/*** //  编写一个程序,获取10个1至20的随机数,要求随机数不能重复*/public static void fun4() {HashSet<Integer> set=new HashSet<>();for (int i = 0; i < 10; i++) {int rand = rand(1, 20);boolean add = set.add(rand);if (add==false) {i--;}}System.out.println(set);}public static int rand(int i, int j) {int num;int min = i, max = j;num = min + (int) (Math.random() * (max - min + 1));return num;}/*** */public static void fun3() {//LinkedHashSet是HashSet的一个子类//特点:有序 怎么存的就能怎么取出LinkedHashSet<String> set =new LinkedHashSet<>();set.add("w");set.add("a");set.add("n");set.add("g");System.out.println(set);}/*** */public static void fun2() {//创建一个hashSet 添加6个人 两两一样HashSet<Person> set=new HashSet<>();set.add(new Person("鹏鹏",17));set.add(new Person("鹏鹏",17));set.add(new Person("水水",18));set.add(new Person("水水",18));set.add(new Person("茜茜",19));set.add(new Person("茜茜",19));//遍历set集合 查看去重效果Iterator<Person> iterator = set.iterator();while (iterator.hasNext()) {Person person = (Person) iterator.next();System.out.println(person);}}/*** 添加字符串的*/public static void fun1() {//使用HashSet主要用来去重//创建一个HashSetHashSet<String>hashSet=new HashSet<>();//添加d d看看效果hashSet.add("d");hashSet.add("d");hashSet.add("a");hashSet.add("b");hashSet.add("c");System.out.println(hashSet);}
}

public class Demo02_2 {public static void main(String[] args) {// fun1();//fun2();}/***  程序启动后, 可以从键盘输入接收多个整数, 直到输入quit时结束输入. *  把所有输入的整数倒序排列打印.*/public static void fun2() {Scanner sc = new Scanner(System.in);String nextLine = "";TreeSet<Integer> set = new TreeSet<>(new DaoXu());while (true) {nextLine = sc.nextLine();if (nextLine.equals("quit")) {break;}int zs = Integer.parseInt(nextLine);set.add(zs);}System.out.println(set);sc.close();}/*** 键盘接受一个字符串,程序对其中所有字符进行排序 要求保留重复的*/public static void fun1() {Scanner sc = new Scanner(System.in);String nextLine = sc.nextLine();char[] array = nextLine.toCharArray();TreeSet<Character> set = new TreeSet<>(new CharLengthCompareImpl());for (char c : array) {set.add(c);}System.out.println(set);sc.close();}
}// 倒叙输出的规则
class DaoXu implements Comparator<Integer> {@Overridepublic int compare(Integer o1, Integer o2) {// TODO Auto-generated method stubreturn o2 - o1;}
}// 保留字符串的规则
class CharLengthCompareImpl implements Comparator<Character> {@Overridepublic int compare(Character o1, Character o2) {// TODO Auto-generated method stubif (o1 - o2 == 0) {return 1;}return o1 - o2;}
}

import java.util.Comparator;
import java.util.TreeSet;
class StringLengthCompareImpl implements Comparator<String>{//主要比 字符串长度//次要比 比较字符串
//  @Override
//  public int compare(String o1, String o2) {
//      // TODO Auto-generated method stub
//      return o1.length()-o2.length()!=0 ?o1.length()-o2.length():o1pareTo(o2);
//  }//保留重复@Overridepublic int compare(String o1, String o2) {// TODO Auto-generated method stubint num =o1.length()-o2.length()!=0 ?o1.length()-o2.length():o1pareTo(o2);return num!=0?num:1;}
}
public class Demo02 {public static void main(String[] args) {//fun1();//fun2();//使用比较器来排序的步骤//1创建一个比较器类 实现Comparator接口//2实现接口中的方法并编写比较规则//3把该类的对象传入TreeSet的集合中TreeSet<String> set =new TreeSet<>(new StringLengthCompareImpl());set.add("asd");set.add("asdge");set.add("asdef");set.add("z");set.add("z");set.add("as");//按字符串长度排序System.out.println(set);}/***  //创建TreeSet集合 保存4个工人//系统给你留了接口Comparable 如果你想通过TreeSet来排序//你就实现这个接口 编写排序的规则 系统就会按规则来排序*/public static void fun2() {TreeSet<Worker> set =new TreeSet<>();set.add(new Worker("张三",13));set.add(new Worker("李四",13));set.add(new Worker("王五",45));set.add(new Worker("赵六",27));for (Worker worker : set) {System.out.println(worker);}}/*** */public static void fun1() {//创建一个TreeSetTreeSet<Integer> set =new TreeSet<>();set.add(1);set.add(3);set.add(4);set.add(6);set.add(7);for (Integer integer : set) {System.out.println(integer);}}
}

更多推荐

杰神之Java集合中的Set(懒人版)

本文发布于:2024-03-06 12:12:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1715299.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:懒人   神之   Java   Set

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!