Java序谈之HashSet类和TreeSet类
来源:互联网 发布:office2016激活工具mac 编辑:程序博客网 时间:2024/05/21 06:28
Set接口的特点?
1、无角标
2、不按顺序排列
3、元素不重复
Set接口分类?
HashSet类和TreeSet类
HashSet的作用、使用方式,存储特点?
作用:去除集合中重复元素
使用方式:在集合中元素所在集合中重写HashCode()方法、重写equals()方法
存储特点:每个集合中的元素会被分配一个哈希值,这个哈希值是元素特有的值,并且判断是否有相同的哈希值,如果存在进入equals方法
进行判断,是否是相同的元素,返回值类型是Boolean类型的
LinkedHashSet
可以在去除重复元素的同时,按照元素装填的顺序输出元素
需求:去除一些重复的对象
代码示例:
LinkedHashSet<Person> hashSet = new LinkedHashSet<>();hashSet.add(new Person(18,"wang"));hashSet.add(new Person(17,"wang"));hashSet.add(new Person(19,"wangnn"));hashSet.add(new Person(20,"wangning"));hashSet.add(new Person(18,"wang"));System.out.println(hashSet);
HashCode()和equals()方法
代码示例:
@Overridepublic int hashCode() {// TODO Auto-generated method stubreturn this.age;}@Overridepublic boolean equals(Object obj) {Person p1 = (Person)obj;return this.age==p1.age&&this.name.equals(p1.getName());}
需求:存入十个随机数(1~20),去掉重复
代码示例:
HashSet<Integer> hashSet2 = new HashSet<>();while (hashSet2.size()<10) {int a = (int)(Math.random()*20)+1;hashSet2.add(a);}System.out.println(hashSet2);
Integer类中重写了HashCode()和equals()方法,这里不需要自己判断
需求:输入一个字符串,去掉重复的字符,打印出不同的字符
Scanner scanner = new Scanner(System.in);System.out.println("请输入一个字符:");String str = scanner.nextLine();char[] charArray = str.toCharArray();HashSet<Character> hashSet3 = new HashSet<>();for (int i = 0; i < charArray.length; i++) {hashSet3.add(charArray[i]);}System.out.println(hashSet3);String类中重写了HashCode()和equals()方法,这里不需要自己判断
需求:操作原集合,使用ArrayList集合,完成去重的操作
代码示例:
ArrayList<String> arrayList = new ArrayList<>();arrayList.add("a");arrayList.add("a");arrayList.add("b");HashSet<String> hashSet4 = new HashSet<>();hashSet4.addAll(arrayList);arrayList.clear();arrayList.addAll(hashSet4);System.out.println(arrayList);
TreeSet类的作用、使用方式、存储特点?
作用:可以对集合进行排序
使用方式:建立一个类实现comparator接口,重写其中的compare方法,返回值类型是int型,并且在TreeSet初始化时候传入这个对象
存储特点:按照二叉树存储,当返回值大于0,存储在右边,当返回值小于0,存储在左边,当返回值=0,舍弃,一般也允许重复情况
需求:创建一个TreeSet添加几个数,查看效果,可以对整数排序
代码示例:
TreeSet<Integer> treeSet = new TreeSet<>();treeSet.add(2);treeSet.add(2);treeSet.add(1);treeSet.add(3);treeSet.add(5);treeSet.add(4);treeSet.add(6);System.out.println(treeSet);
分析:integer类中已经实现了comparator接口,重写了compare方法
需求:将字符按照顺序排序
代码示例:
TreeSet<String> treeSet = new TreeSet<>(new Comparator1());treeSet.add("aaa");treeSet.add("bbb");treeSet.add("ccc");treeSet.add("ss");System.out.println(treeSet);
比较器部分代码示例:
public int compare(String o1, String o2) {int length = o1.length() - o2.length();int num = length ==0 ? o1.compareTo(o2) : length;return num == 0 ? -1 : num;}
分析:num返回0时候设置为-1,这样就保存了重复元素
需求:输入字符串,倒序打印
代码分析:
TreeSet<Character> treeSet2 = new TreeSet<>(new Comparator2());String str1 = scanner.nextLine();char[] charArray2 = str1.toCharArray();for (int i = 0; i < charArray2.length; i++) {treeSet2.add(charArray2[i]);}比较器部分代码示例:
@Overridepublic int compare(Character o1, Character o2) {int num = o2 - o1;return num == 0 ? 1 : num;}
需求:在一个ArrayList集合中存储了无序并且重复的字符串,要求排序,而且还不能去除重复
代码示例:
public static void fun4() {ArrayList<String> arrayList = new ArrayList<>();arrayList.add("wangning");arrayList.add("wangning");arrayList.add("wang");arrayList.add("ning");arrayList.add("wangn");TreeSet<String> treeSet = new TreeSet<>(new Comparator2());treeSet.addAll(arrayList);arrayList.clear();arrayList.addAll(treeSet);System.out.println(arrayList);}
比较器部分代码示例:
@Overridepublic int compare(String o1, String o2) {// TODO Auto-generated method stubint length = o1.length() - o2.length();int num = length ==0 ? o1.compareTo(o2) : length;return num == 0?-1 :num ;
需求:接收一些整数,并且将这些数全部倒序打印出来
代码示例:
HashSet<Integer> hashSet5 = new HashSet<>();while (hashSet5.size()<5) {String a1 = scanner.nextLine();if(a1.equals("quit")) {break;}hashSet5.add(Integer.parseInt(a1));}System.out.println(hashSet5);
比较器部分代码示例:
@Overridepublic int compare(Integer o1, Integer o2) { int num = o1 - o2;return num == 0 ? o1 : num;}
需求:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台
代码示例:
public static void fun7() {Scanner scanner = new Scanner(System.in);TreeSet<Student> treeSet = new TreeSet<>(new Comparator5());for (int i = 0; i < 5; i++) {Student s1 = new Student();System.out.println("请输入信息");String name = scanner.nextLine();String [] array = new String[4];array = name.split(",");s1.setName(array[0]);s1.setChinese(Integer.parseInt(array[1]));s1.setMath(Integer.parseInt(array[2]));s1.setEnglish(Integer.parseInt(array[3]));s1.setTotal(s1.getChinese()+s1.getEnglish()+s1.getMath());treeSet.add(s1);}System.out.println(treeSet);scanner.close();}比较器部分代码示例:
@Overridepublic int compare(Student o1, Student o2) {// TODO Auto-generated method stubint num = o1.getTotal() - o2.getTotal();return num == 0 ? -1 : num;}
分析:这里需要建立一个Student类,分别对应五个属性,使用TreeSet类根据总成绩进行正向排序。
阅读全文
0 0
- Java序谈之HashSet类和TreeSet类
- java之实现类HashSet与TreeSet
- JAVA数据结构之HashSet和TreeSet总结
- JAVA HashSet和TreeSet
- JavaSE入门学习36:Java集合框架之Set接口及其实现类HashSet和TreeSet
- Java 之 HashSet与TreeSet
- HashMap之HashSet和TreeSet
- Java集合类HashSet、TreeSet比较
- Java中的HashSet和TreeSet
- 容器类HashSet和TreeSet习题
- TreeSet HashSet放入自定义类
- JAVA集合之---TreeSet、HashSet、EnumSet
- Set集合之HashSet类、LinkedHashSet类、TreeSet类和EnumSet类
- java的集合中的Set以及set的实现类HashSet和TreeSet
- Java HashSet和TreeSet的区别
- java基础HashSet 和 TreeSet 理解
- Java集合 HashSet 和 TreeSet的理解
- java--集合框架的Hashset和Treeset
- java编程,通过终端实现一个用户密码验证
- 一文快速掌握 Git 用法(Git介绍及使用流程)
- 信号处理中,为什么要引入复数
- wireshark文件pcap的格式
- Openstack各组件服务功能介绍
- Java序谈之HashSet类和TreeSet类
- java 行为模式 备忘录模式
- Asp.NET Core+ABP框架+IdentityServer4+MySQL+Ext JS之数据迁移
- C#类中的引用成员field
- 无线网络和移动网络--计算机网络自顶向下笔记(七)
- 线性代数 02.03 逆矩阵
- The Swift Programming Language
- f,s,z
- 使用应用程序测试网卡收发UDP数据包性能