java 使用TreeSet将字符串中的数值进行排序

一、使用类

1、TreeSet类

  • add(E e) 将指定的元素添加到此 set

2、String类

  • split(String regex) 根据给定正则表达式的匹配拆分此字符串。返回字符串数组

  • length() 返回此字符串的长度。

3、Integer类

  • static int parseInt(String s) 将字符串参数作为有符号的十进制整数进行解析。

二、代码

import java.util.TreeSet;

//需求:将字符串中的数值进行排序
//eg: String str = "8 10 15 5 2 7"排序为 2 5 7 8 10 15

public class TreeSet练习
{
    public static void main(String[] args)
    {
        String str = "8 10 15 5 2 7";
        TreeSet tree = new TreeSet();
        String[] substr = str.split(" ");
        for(int i=0;i<substr.length;i++)
        {
            //字符串转为int类型数值需要使用Integer.parseInt([String])方法
            //如果不转换为int型,则add的时候会用String类型的compareto方法,会出现10比2小的情况
            tree.add(Integer.parseInt(substr[i]));
        }
        System.out.println(tree);
    }
}

三、截图

这里写图片描述

若用  tree.add(substr[i])
而不用 tree.add(Integer.parseInt(substr[i]))
即:不将string转换为int型数值,则出现:

这里写图片描述

原因:

TreeSet是可以对字符串进行排序的, 因为字符串已经实现了Comparable接口。

字符串的比较规则:

情况一:对应位置有不同的字符出现, 就比较的就是对应位置不同的字符。
如:"abc"与"aw"比较,第1位a一样,则比较第2位,发现b比w小,则判定"abc"小于"aw"

情况二:对应位置上的字符都一样,比较的就是字符串的长度。
如:"abc"与"abcccc"比较,前3位一样,发现abcccc比abc长,则判定"abc"小于"abcccc"
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Java,Set是一种集合数据结构,它不允许重复元素,并且没有固定的顺序。然而,JavaTreeSet是一种基于红黑树数据结构的Set实现,它可以自定义排序规则。 TreeSet是一个有序的集合,它维护了一个基于元素值的红黑树结构。默认情况下,TreeSet按照元素的自然顺序进行排序。例如,如果元素是整数,则按照从小到大的顺序排列;如果元素是字符串,则按照字典顺序进行排序。 但是,TreeSet也可以使用自定义的Comparator接口实现来指定排序规则。Comparator接口定义了一个compare()方法,它接受两个参数并返回一个int值。如果第一个参数小于第二个参数,则返回负整数;如果第一个参数大于第二个参数,则返回正整数;如果两个参数相等,则返回0。 例如,我们可以创建一个按照字符串长度进行排序TreeSet,如下所示: ```java TreeSet<String> treeSet = new TreeSet<>(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.length() - o2.length(); } }); treeSet.add("hello"); treeSet.add("world"); treeSet.add("java"); ``` 在这个例子,我们创建了一个TreeSet使用了一个自定义的Comparator实现。这个Comparator实现比较两个字符串的长度,并按照长度从小到大的顺序排序。 最终,这个TreeSet的元素将按照长度从小到大的顺序排列,输出结果为: ``` [java, hello, world] ``` ### 回答2: 在使用Java集合类TreeSet时,我们默认使用其自然排序规则对元素进行排序。但有时候,我们需要根据自定义的规则对元素进行排序,这时我们可以使用TreeSet提供的自定义排序方法——Comparator。 Comparator是一个接口,其定义了两个方法,分别是compare()和equals()。其,compare()方法接收两个参数,分别是要比较的对象x和y,这两个对象需要实现Comparator接口;equals()方法用于比较两个对象是否相等。 假设有一个存放Person对象的TreeSet集合,我们需要根据Person的年龄属性进行升序排序,可以通过以下步骤实现: 1. 定义一个Person类,包含name和age两个属性,以及相应的getter和setter方法; 2. 在Person类实现Comparator接口,并重写compare()方法,在方法对年龄属性进行比较; 3. 创建一个TreeSet集合,并在构造函数传入自定义的Comparator对象; 4. 将多个Person对象添加到TreeSet集合。 具体的代码实现如下: ``` import java.util.*; class Person implements Comparator<Person> { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return this.name; } public int getAge() { return this.age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } @Override public int compare(Person p1, Person p2) { if (p1.getAge() > p2.getAge()) { return 1; } else if (p1.getAge() < p2.getAge()) { return -1; } else { return 0; } } } public class TreeSetDemo { public static void main(String[] args) { TreeSet<Person> set = new TreeSet<Person>(new Person()); set.add(new Person("张三", 28)); set.add(new Person("李四", 20)); set.add(new Person("王五", 25)); for (Person p : set) { System.out.println(p.getName() + " " + p.getAge()); } } } ``` 在代码,我们定义了一个Person类,它实现了Comparator接口,并重写了compare()方法,根据Person对象的age属性进行比较。在主方法,我们创建了一个TreeSet集合,并在其添加了多个Person对象,它们会被按照年龄的升序排序。最后,我们通过foreach循环遍历集合的所有元素,并输出它们的name和age属性。 需要注意的是,在使用自定义比较器时,如果想要保证集合没有重复元素,我们还需要在Person类重写equals()方法,并根据name和age两个属性进行比较。 ### 回答3: 在使用Java集合类TreeSet时,数据默认情况下是按照自然顺序进行排序的。但是在某些情况下,我们可能希望按照自己定义的规则进行排序。这时,就需要使用TreeSet的自定义排序规则。 自定义排序规则需要我们实现Comparator接口的compare方法。该方法用于对实现了Comparable接口的对象进行比较。因此,我们需要在自定义类实现该接口,并重写其的compare方法。 接下来,我们以Student类为例,介绍如何实现TreeSet的自定义排序规则。假设我们希望按照学生的分数进行从高到低的排序。 首先,在Student类实现Comparable接口 public class Student implements Comparable<Student>{ private String name; private int score; public Student(String name, int score) { this.name = name; this.score = score; } @Override public int compareTo(Student o) { return o.score - this.score; } } 在该类,我们通过重写compareTo方法,实现了按照学生分数进行排序的规则。 接下来,在使用TreeSet时,我们需要传入一个Comparator对象,该对象用于指定TreeSet元素的排序规则。示例代码如下: TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o2.getScore() - o1.getScore(); } }); 在该代码,我们通过匿名类的方式实现了Comparator接口,并重写了其的compare方法。通过该方法,我们指定了从高到低的排序规则。 通过以上的示例代码,我们可以看出,自定义排序规则的具体实现可以根据具体情况进行调整。而在该实现,我们需要注意以下几点: 1. 实现Comparable接口,用于指定对象的默认排序规则。 2. 实现Comparator接口,在特定情况下自定义排序规则。 3. 在使用TreeSet时,需要传入一个Comparator对象,用于指定排序规则。 以上就是Java集合类之set的treeset之自定义排序规则的详细介绍。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值