java comparable和comparator StringBuffer和String转换和用法

所有进行sort的类都要实现comparable接口或者是comparator,sort没有特别声明都是升序排序

1、comparable主要就只有一个函数int compareTo(T o),返回值只有-1,0,1,具体升序还是降序看如下代码比较清晰

//降序
	static class person implements Comparable<person>{
		int age=0;;
		public person(int age) {
			this.age=age;
		}
		@Override
		public int compareTo(person p) {
			return this.age>p.age?-1:(age==p.age?0:1);
		}
		public String toString() {
			return Integer.toString(age);
		}
	}
	public static void main(String[] args) {
		person[] p=new person[3];
		p[0]=new person(1);
		p[1]=new person(2);
		p[2]=new person(3);
		Arrays.parallelSort(p);
		System.out.println(Arrays.toString(p));
		// TODO Auto-generated method stub

	}

注意原生类不能直接i.toString(),必须要用Integer.toString(i)。输出结果如下

[3, 2, 1]

若是升序的话就改一下compareTo函数就好了

		public int compareTo(person p) {
			//return this.age>p.age?-1:(age==p.age?0:1);
			if(age>p.age)
				return 1;
			else if(age==p.age)
				return 0;
			else
				return -1;
		}

2、在Collection.sort和Arrays.sort用的较多的还是comparator,因为不需要改类型,直接在sort后面添加一个comparator就行了。comparator重写的是int compare(T o1, T o2),是数值时,直接用o1.getValue()-o2.getValue() 是升序,o2.getValue()-o1.getValue() 是降序,若是字符串的话利用compareTo(T o) 方法进行比较,该方法比较从头开始每一个字符,当前者大于后者返回1,当前者小于后者返回-1。

		person[] p=new person[3];
		p[0]=new person(1);
		p[1]=new person(2);
		p[2]=new person(3);
		Arrays.sort(p,new Comparator<person>() {
			public int compare(person p1,person p2) {
				return p1.age-p2.age;
			}
		});
		System.out.println(Arrays.toString(p));

结果是升序,并且person这个类没有实现comparable的接口。

3、StringBuffer和String相互转换,由于String是不可变的,改变String实际上是创建了一个全新的String,而最初的String对象丝毫未动。

		StringBuffer sb1=new StringBuffer();
		String s1="hello";
		sb1.append(s1);
		s1=sb1.toString();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值