Set集合
set集合简单使用
package com.cloud.vector; import java.util.HashSet; import java.util.Set; public class Day2 { /* --|Set 实现Set接口的集合类,无序,不可以重复 元素添加输出的顺序不一样 */ public static void main(String[] args) { Set set=new HashSet(); set.add("Spring1"); set.add("Spring2"); set.add("Spring3"); System.out.println("添加是否成功?"+set.add("Spring3")); System.out.println(set); } } |
Set集合添加元素
package com.cloud.vector; import java.util.HashSet; public class Day3 { public static void main(String[] args) { HashSet<Person> set=new HashSet<Person>(); /* 添加简单元素,该元素不可重复 set.add("Spring1"); set.add("Spring2"); set.add("Spring3"); set.add("Spring3"); */ set.add(new Person(1,"Spring1")); set.add(new Person(2,"Spring2")); set.add(new Person(3,"Spring3")); System.out.println("是否添加成功?"+set.add(new Person(3,"Spring3"))); System.out.println(set); } } class Person{ int id; String name; public Person(int id,String name){ this.id=id; this.name=name; } @Override public String toString() { return "{编号="+this.id+";名字="+this.name+"}"; } @Override public boolean equals(Object obj) { System.out.println("equals(Object obj)被调用"); Person p=(Person) obj; return this.id==p.id; } @Override public int hashCode() { System.out.println("===调用了hashCode()==="); //这里修改返回id return this.id; } } |
String类型的比较
package com.cloud.vector; public class Demo4 { public static void main(String[] args) { String str1="hello"; String str2=new String("hello"); System.out.println("判断两个是否是相同的对象:"+(str1==str2)); //hashCode默认情况下表示的是内存地址,但是String重写的了object的hashCode()的方法 System.out.println("hashCode="+str1.hashCode()); System.out.println("hashCode="+str2.hashCode()); } } |
HashSet简单使用
package com.cloud.vector; import java.util.HashSet; import java.util.Scanner; public class Demo5 { /** * 实现的需求:键盘录入用户名和密码,如果用户名和密码已经存在,则重复阻止添加 */ public static void main(String[] args) { @SuppressWarnings("resource") Scanner scanner = new Scanner(System.in); HashSet<User> set=new HashSet<User>(); while(true){ System.out.println("请输入用户名:"); String userName = scanner.next(); System.out.println("请输入密码:"); String password = scanner.next(); //创建用户 User user = new User(userName,password); if(set.add(user)){ System.out.println("注册成功..."); System.out.println("用户信息:"+set); } else{ System.out.println("注册失败..."); } } } } class User{ String userName; String password; public User(String userName,String password){ super(); this.userName=userName; this.password=password; } @Override public String toString() { return "{用户名:"+this.userName+";密码:"+this.password; } @Override public boolean equals(Object obj) { User user = (User)obj; return this.userName.equals(user.userName)&&this.password.equals(user.password); } @Override public int hashCode() { return userName.hashCode()+password.hashCode(); } } |
TreeSet简单用法
package com.cloud.vector; import java.util.TreeSet; public class Demo7 { public static void main(String[] args) { TreeSet tree = new TreeSet(); /*tree.add(4); tree.add(3); tree.add(6); tree.add(5); tree.add(2); //打印:[2, 3, 4, 5, 6] */ tree.add('c'); tree.add('e'); tree.add('b'); tree.add('a'); //打印:[a, b, c, e] System.out.println(tree); } } |
TreeSet添加自定义元素
package com.cloud.vector; import java.util.TreeSet; public class Demo8 { /** * TreeSet处理自定义成员变量 * 注意事项: * 1.如果元素具备自然特性,则按照元素的自然特性进行排序 * 2.如果元素不具备自然顺序的特性,那么元素所属的类必须实现Comparable接口 * 3.如果compareTo方法返回的是0,那么该元素视为重复元素,不允许添加 * 4.在添加元素中,如果该元素不具备自然特性,该元素所属的类也没有实现Comparable接口,就必须 * 在创建TreeSet的时候传入一个比较器,把元素的比较放到compare方法中即可 * 比较器使用方法: * class 类名 implements Comparator{ * } * 5.在传入元素的时候,如果元素本身不具备自然特性,但是元素所属的类实现了Comparable接口,同时 * TreeSet对象也传入了比较器,则比较器的规则优先使用 * 6.TreeSet可以对字符串进行比较 * 情况1:可以找到对应不同的字符,比较的就是对应的字符 * * 情况2:找不到对应的不同的字符,比较的就是字符串长度 */ public static void main(String[] args) { TreeSet<Employee> tree = new TreeSet<Employee>(); tree.add(new Employee(1, "aaa", 500)); tree.add(new Employee(2, "bbb", 400)); tree.add(new Employee(3, "ccc", 300)); tree.add(new Employee(4, "ddd", 200)); //打印薪水由低到高排序 System.out.println(tree); } } @SuppressWarnings("rawtypes") class Employee implements Comparable{ int id; String name; int salary; public Employee(int id, String name, int salary) { super(); this.id = id; this.name = name; this.salary = salary; } @Override public String toString() { return "{编号:"+this.id+";姓名:"+this.name+";薪水:"+this.salary+"}"; } //该方法定义元素之间的比较规则 //比较此对象(this)与制定对象的顺序 @Override public int compareTo(Object o) { Employee emp=(Employee) o; System.out.println(this.name+"和"+emp.name+"比较"); return this.salary-emp.salary; } } |
TreeSet中比较器的使用
package com.cloud.vector; import java.util.Comparator; import java.util.TreeSet; public class Demo9 { /** * 比较器使用的案例 * 比较器使用方法: * class 类名 implements Comparator{ * } */ public static void main(String[] args) { //创建一个比较器 MyComparator mycom = new MyComparator(); //把比较器传入 TreeSet<Employee2> tree = new TreeSet<Employee2>(mycom); tree.add(new Employee2(1, "aaa", 500)); tree.add(new Employee2(2, "bbb", 400)); tree.add(new Employee2(3, "ccc", 300)); tree.add(new Employee2(4, "ddd", 200)); System.out.println(tree); } } @SuppressWarnings("rawtypes") class Employee2 /*implements Comparable*/{ int id; String name; int salary; public Employee2(int id, String name, int salary) { super(); this.id = id; this.name = name; this.salary = salary; } @Override public String toString() { return "{编号:"+this.id+";姓名:"+this.name+";薪水:"+this.salary+"}"; } //该方法定义元素之间的比较规则 //比较此对象(this)与制定对象的顺序 /* @Override public int compareTo(Object o) { Employee2 emp=(Employee2) o; System.out.println(this.name+"和"+emp.name+"比较"); return this.salary-emp.salary; } */ } //自定义一个比较器 class MyComparator implements Comparator{ @Override public int compare(Object o1, Object o2) { Employee2 emp1=(Employee2) o1; Employee2 emp2=(Employee2) o2; return emp1.id-emp2.id; } } |
TreeSet比较字符串
package com.cloud.vector; import java.util.TreeSet; public class Demo10 { /** * TreeSet比较字符串案例 */ public static void main(String[] args) { TreeSet tree = new TreeSet(); //abc和abw比较的是c和w,abc和abcd比较的是d tree.add("abc"); tree.add("abcd"); tree.add("abw"); System.out.println(tree); System.out.println("a".compareTo("c")); } } |
TreeSet案例
package com.cloud.vector; import java.util.TreeSet; public class Demo11 { /** * 对字符串进行排序 * String ='2 15 17 4 8 6 12' */ public static void main(String[] args) { String str="2 15 17 4 8 6 12"; String[] datas = str.split(" "); TreeSet tree = new TreeSet(); for(int i=0;i<datas.length;i++){ tree.add(Integer.parseInt(datas[i])); } System.out.println(tree); } } |