热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java中TreeSet的排序机制及应用

本文探讨了Java集合框架中的TreeSet类,重点介绍了其自然排序与定制排序的功能。通过实现Comparator接口,可以轻松地对TreeSet进行降序或其他特定顺序的排序。
Java中TreeSet的排序机制及应用

1. TreeSet的基本排序方式


TreeSet是Java集合框架中的一个重要组成部分,它不仅能够存储无重复的元素,还能保证这些元素处于有序状态。TreeSet支持两种主要的排序方式:自然排序和定制排序。默认情况下,TreeSet会根据元素的自然顺序进行排序,即实现了Comparable接口的类的对象可以自动按照它们的自然顺序排列。


2. 实现定制排序


对于需要特定排序规则的情况,如降序排列,可以通过实现Comparator接口来完成。此接口包含一个核心方法:int compare(T o1, T o2),该方法决定了两个对象之间的相对顺序。为了使TreeSet使用定制的排序规则,必须在创建TreeSet实例时传入一个实现了Comparator接口的对象。


3. 示例代码


下面是一个简单的示例,展示了如何使用Comparator接口来自定义降序排序:


package com.hellojava.entity;

import java.util.Comparator;

public class OrderNum implements Comparator {

@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
}

接下来,我们将在一个Servlet中利用这个自定义的排序器来处理用户输入的数据,并将结果以指定的顺序返回给客户端:


package com.hellojava.servlet;

import java.io.IOException;
import java.util.Iterator;
import java.util.TreeSet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hellojava.entity.OrderNum;

public class LoginServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String number = request.getParameter("number");
String order = request.getParameter("order");
String[] str1 = number.split(",");
TreeSet treeSet = null;
if ("up".equals(order)) {
treeSet = new TreeSet<>();
} else if ("down".equals(order)) {
treeSet = new TreeSet<>(new OrderNum());
}
for (String s : str1) {
treeSet.add(s);
}
request.getSession().setAttribute("tr", treeSet);
response.sendRedirect("index.jsp");
}
}

前端页面设计包括一个简单的表单,允许用户输入数字序列并选择排序方式:



<%@ page language="java" cOntentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>










升序
降序






最后,index.jsp页面负责展示排序后的结果:



<%@ page language="java" cOntentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>








${t}






推荐阅读
  • 本文详细探讨了UML用例图中的两种重要关系——包含关系和扩展关系,通过具体示例解析这两种关系的应用场景及其实现方式。 ... [详细]
  • 题目描述:孩子们围坐在一起,分享水果,场面温馨。然而,由于孩子们身高不同,排队时显得高低不齐。给定孩子们的身高序列,通过交换某些孩子的顺序,计算每次交换后的序列混乱度。 ... [详细]
  • 探索Offer——JZ57:寻找二叉树中的下一个节点
    本题旨在从给定的二叉树节点出发,找到该节点在中序遍历序列中的后继节点。值得注意的是,这里的二叉树节点除了左右子节点外,还包含了一个指向父节点的额外链接。 ... [详细]
  • 从零开始学重构——重构的流程及基础重构手法
    重构的流程重构手法  正如上一次所讲的那样,重构有两个基本条件,一是要保持代码在重构前后的行为基本不变,二是整个过程是受控且尽可能少地产生错误。尤其是对于第二点,产生了一系列的重构手 ... [详细]
  • Android 5 及以上版本中使用存储访问框架(SAF)实现 SD 卡写入权限的方法
    本文探讨了在 Android 5 及更高版本中通过存储访问框架(Storage Access Framework, SAF)实现对 SD 卡文件的写入与重命名操作。文章分析了 SAF 的工作原理,并提供了一个示例应用的代码实现,展示了如何正确获取并使用用户授予的写入权限。 ... [详细]
  • 如何清空Layui树结构
    本文将详细介绍如何使用Layui框架清空树形结构,包括创建树、添加节点以及实现清空功能的具体步骤。通过本文,您将能够掌握Layui树的管理技巧。 ... [详细]
  • https:leetcode-cn.comproblemscount-complete-tree-nodes递归的题目,左右中的后序遍历思想。***Definiti ... [详细]
  • 时尚界的独特存在:Ruby Aldridge的家族故事
    在时尚界,有些家族以其独特的魅力和才华闻名。本文将介绍Ruby Aldridge,一个在家族光环下依然走出自己道路的时尚新星。 ... [详细]
  • 题目大意:给你一棵树,根节点为1有2种操作,第一种是给u节点所在的子树的所有节点的权值x第二种是询问,假设v是子树u中的节点 ... [详细]
  • 本文介绍如何使用Java实现AC自动机(Aho-Corasick算法),以实现高效的多模式字符串匹配。文章涵盖了Trie树和KMP算法的基础知识,并提供了一个详细的代码示例,包括构建Trie树、设置失败指针以及执行搜索的过程。 ... [详细]
  • 本文介绍了如何在现有Ceph集群中添加新节点以扩展存储容量,并确保在不中断服务的情况下完成这一操作。文章详细描述了新节点的安装配置步骤及数据重新平衡的方法。 ... [详细]
  • 本文探讨了如何利用伸展树(Splay Tree)来高效地处理区间操作,包括区间修改、查询和删除等。通过引入size域,伸展树能够灵活应对序列结构的变化。 ... [详细]
  • 深入解析C++中的红黑树
    本文将详细介绍二叉搜索树的一种重要变体——红黑树,探讨其通过颜色标记维持平衡的机制,以及它在实际应用中的优势。 ... [详细]
  • 我们正在使用GNU Make来构建我们的系统,在makefile文件的末尾,我们通过一个名为Makedepends的包含来生成一系列的.d文件。然而,当文件被删除或移动时,依赖关系会中断,我们需要寻找一种方法来优雅地处理这种情况。 ... [详细]
  • 多项目环境下的代码复用策略
    在前端开发中,面对多个并行项目的场景,如何有效地实现代码复用成为了一个重要的议题。本文将探讨一种利用npm包管理来实现跨项目组件共享的方法。 ... [详细]
author-avatar
最佳乔海燕
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有