链表排序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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 零拷贝java_java arraycopy方法

    零拷贝java_java arraycopy方法importcom.fasterxml.jackson.databind.JsonNode;//导入方法依赖的package包/类/***Appliesthisschemaruletotaketherequiredcodegenerationsteps.**AJava{@linkEnum}iscreated,withconstantsforeach…

    2022年10月2日
    4
  • 关于kafka集群搭建前后

    关于kafka集群搭建前后近期搭建了kafka集群服务器,遇到了问题进行记录1.遇到某台服务器网卡出现问题,导致无效,因为网卡是集成的,即是zookeeper组中一个,也是kafka的brokers之一解决办法:重新更换服务器,重装系统,进行安全配置,在配置好zookeeper和kafka,和损坏的服务器一样的配置2.替换服务器后,遇到过了数据量太大,其中替换的服务器磁盘利用率不断增加,达到最大值,导致服务启动

    2022年4月29日
    35
  • 未能连接一个windows服务器,Win7出现未能连接一个Windows服务的解决办法

    未能连接一个windows服务器,Win7出现未能连接一个Windows服务的解决办法近日有网友“所爱隔山海”Win7电脑在开机的时候遇到了开机很慢,开机后提示:未能连接一个Windows服务。如果遇到电脑出现未能连接一个Windows服务该如何解决呢?这就是小编今天要分享的一个电脑小技巧。Win7出现“未能连接一个Windows服务”错误提示,主要是由于电脑系统中的“SystemEventNotification”服务没有正常开启导致的,可能是用户在使用一些第三方安全软件优化…

    2022年5月14日
    76
  • Windows查看CUDA版本「建议收藏」

    Windows查看CUDA版本「建议收藏」方法1:进入以下目录C:\ProgramFiles\NVIDIAGPUComputingToolkit\CUDA即可安装的CUDA版本方法2:打开cmd,输入nvcc–version

    2022年4月28日
    60
  • 八个Android项目源码

    八个Android项目源码给大家分享几个Android开发项目源码,大部分功能相信可以在实战项目中直接使用,供大家下载学习,大部分项目是基于AndroidStudio开发,IDE为Eclipse的童鞋可通过网上教程自行转换,这里就不多说了。有句话说,不贴墙纸的装修都是耍流氓,无源码无效果图的文章也算是耍流氓,尴尬,那就直接上图吧。最近在整理GitHub,打算把一些以前做过的项目中部分功能和使用的技术点资料上传,回头也和大家分享。OK,要去忙了,再不去忙项目,测试版出不来就危险了,希望有一天不用敲代码也可以吃到馒头,吼吼~~

    2022年6月6日
    35
  • 散列/散列函数「建议收藏」

    散列/散列函数「建议收藏」散列是一种用于以常数平均时间执行插入、删除和查找的技术。每个关键字被映射到从0-TableSize-1这个范围中的某个数,并且被放到适当的单元中。这种映射就叫做散列函数我认为,先用散列函数将我们所要进行操作的集合整合成散列表,是对之后的操作的一种便利。放到实际中去,我们要进行操作的集合不仅仅只是数字,例如图书馆中的书籍分类等等。而且就算是一组不连续差距较大的数字,要执行后序的插入删除和查找都是很不方

    2022年5月15日
    43

发表回复

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

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