链表排序java_java有序链表

链表排序java_java有序链表这是自己的第一篇博客,话说学习是50%的学习,另外50%是解释,以后会分享自己遇到的一些问题,欢迎各位大佬指教。第一篇对象数组排序的问题处理。..

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

这是自己的第一篇博客,话说学习是50%的学习,另外50%是解释,以后会分享自己遇到的一些问题,欢迎各位大佬指教。
今天在进行数据处理时遇到了对象数组排序的问题,现总结如下:

一.链表中存放的数据是字符串数据

1.可以直接使用Collections.sort(list)的方法来对字符串按字典序进行排序,以及利用Collections.reverse(list)来进行字典倒序排序。(因为String类已经实现了Comparable接口)

		ArrayList<String> list=new ArrayList<String>();
		list.add("123");
		list.add("2");
		list.add("13");
		Collections.sort(list);

运行结果
2.如果上面的排序不能满足我们的要求,那么我们需要去自定义排序方法对集合进行排序,自定义排序需要实现Comparator接口,并重写排序方法int compare(String s1,String s2)
(Comparator接口中有一个方法int compare(T s1,t s2)。这个方法返回值为int,说明比较结果s1和s2,如果返回值小于0,则s1<s2;返回值等于0,s1=s2;返回值大于0,s1>s2)

		ArrayList<String> list=new ArrayList<String>();
		list.add("123");
		list.add("2");
		list.add("13");
		Collections.sort(list,new Comparator<String>() {
			public int compare(String o1,String o2)
			{
				int flag=1;
				if(Integer.parseInt(o1)<Integer.parseInt(o2))
					flag=-1;
				if(Integer.parseInt(o1)==Integer.parseInt(o2))
					flag=0;
				return flag;
			}
		});

在这里插入图片描述

二.链表中存放的数据是对象数据

这种情况和链表中存放的数据是String类型,笔者认为处理方式如出一辙,只不过要在对象的基础上找到某一成员变量,然后根据其进行排序。例:对Count对象的number按照数据大小升序排列。按降序排列只需要处理compare方法即可。

public class Count{
	private String number;

	public String getNumber() {
		return number;
	}

	public void setNumber(String number) {
		this.number = number;
	}}
	ArrayList<Count> list2=new ArrayList<Count>();
	Count a=new Count();a.setNumber("13");list2.add(a);
	Count b=new Count();b.setNumber("123");list2.add(b);
	Count c=new Count();c.setNumber("2");list2.add(c);
	Collections.sort(list2);
	Collections.sort(list2,new Comparator<Count>() {
		public int compare(Count o1,Count o2)
		{
			int flag=-1;
			if(Integer.parseInt(o1.getNumber())<Integer.parseInt(o2.getNumber()))
				flag=1;
			if(Integer.parseInt(o1.getNumber())==Integer.parseInt(o2.getNumber()))
				flag=0;
			return flag;
		}
	});

在这里插入图片描述

三. Java比较器Comparable和Comparator的区别

比较器在对对象数组排序时至关重要,二者有一定的区别。因为Comparable接口是在设计类时,考虑到让类去实现该接口,如果在设计类时没有考虑到,那就可以通过Comparator来实现排序功能;这两个接口需要重写的方法区别之处:Comparable接口对应排序方法为int compareTo(Object b),返回值取值代表大小比较和int Compare(T s1,t s2)相同,显而易见二者参数个数不同。下面举一个利用Comparable的例子:

package dateProcess;

public class Count implements Comparable{
	private String number;

	public String getNumber() {
		return number;
	}

	public void setNumber(String number) {
		this.number = number;
	}
	
	public int compareTo(Object b)
	{
		Count s=(Count) b;
		int flag=1;
		if(Integer.parseInt(this.getNumber())<Integer.parseInt(s.getNumber()))
			flag=-1;
		if(Integer.parseInt(this.getNumber())==Integer.parseInt(s.getNumber()))
			flag=0;
		return flag;
	}

}
ArrayList<Count> list2=new ArrayList<Count>();
		Count a=new Count();a.setNumber("13");list2.add(a);
		Count b=new Count();b.setNumber("123");list2.add(b);
		Count c=new Count();c.setNumber("2");list2.add(c);
		Collections.sort(list2);

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/183236.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 一次xxoo提权[通俗易懂]

    一次xxoo提权[通俗易懂]数据库root权限。然并卵。看了一下phpinfo得知是mysql5.0的然后想要通过udf之类的提权一波,结果一执行sql语句就被狗拦截了。然而数据库这条路是GG了OS名称:MicrosoftWindowsServer2008R2Enterprise修补程序:安装了1个修补程序。然后各种e…

    2022年7月17日
    14
  • JDK卸载和彻底删除「建议收藏」

    JDK卸载和彻底删除「建议收藏」第一步:点击“控制面板”。第二步:点击“卸载程序”。第三步:进入到“程序和功能”界面,找到jdk的两个程序:①java8update171(64-bit);②javaSEDevelopmentKit8update171(64-bit);右击卸载即可第四步:在“运行”中输入Regedit,打开注册表编辑器,找到HKEY_LOCAL_MACHINE/SOFTWARE/JavaSo…

    2022年6月30日
    52
  • OleDbCommand使用参数应该注意的地方

    OleDbCommand使用参数应该注意的地方最近写程序用到OleDbCommand的Parameter写数据库,遇到很多问题:1、OLEDB.NETFramework数据提供程序和ODBC.NETFramework数据提供程序不支持用于将参数传递到SQL语句或存储过程的命名参数。在此情况下,必须使用问号(?)占位符,如以下示例所示。SELECT*FROMCustomersWHERECustomerID

    2022年5月19日
    34
  • 使用ffmeg的7个技巧[通俗易懂]

    使用ffmeg的7个技巧[通俗易懂]FFmpeg堪称音频和视频应用程序的瑞士军刀,提供了丰富的选项和灵活性.很多时候用户为了看视频和听音乐都安装了ffmeg.更多关于ffmeg的详细介绍:here,可以通过ffmpeg-formats查看FFmpeg支持的视音频格式,左侧若是E表明可以编码,D表明可以解码本文着重介绍命令行下ffmeg的7个技巧:1音频转换ffmpeg-imy_audio.wavm

    2022年9月24日
    0
  • stm32数据手册boot_stm32f103中文手册.pdf

    stm32数据手册boot_stm32f103中文手册.pdfstm32f103中文手册STM32F103x6STM32F103x8STM32F103xB增强型,32位基于ARM核心的带闪存、USB、CAN的微控制器7个定时器、2个ADC、9个通信接口功能初步信息■核心−ARM32位的Cortex™-M3CPU−…

    2022年10月16日
    0
  • python自动化运维面试题_运维面试题(含答案)「建议收藏」

    python自动化运维面试题_运维面试题(含答案)「建议收藏」运维工程师面试题姓名:答题时间:1.新安装MYSQL后怎样提升MYSQL的安全级别?A.修改mysql默认端口B.linux下可以通过iptables来限制访问mysql端口的IP地址C.对所有用户设置较复杂密码并严格指定对应账号的访问IP(可在mysql库中user表中指定用户的访问可访问IP地址)D.root特权账号的处理(建议给root账号设置强密码,并指定只允许本地登录)E.开启二进制查询…

    2022年5月10日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号