`
暗黑小菠萝
  • 浏览: 46916 次
  • 性别: Icon_minigender_2
  • 来自: 大连
社区版块
存档分类
最新评论

java集合排序Collections.sort();Comparable;Comparator

    博客分类:
  • Java
阅读更多
一、Collections集合排序:
Collections的集合类包含了排序方法 void sort(List<T> list)但是只能对List进行排序
List
ArrayList是按照添加顺序存储的
LinkedList也是按照添加顺序存储的
①对List进行正常排序
List<String> list = new ArrayList<String>();
list.add("12");
list.add("4");
list.add("23");
//Collections.sort(list);
Collections.sort(list, new Comparator<String>() {
	@Override
	public int compare(String o1, String o2) {
		int x1 = Integer.parseInt(o1);
		int x2 = Integer.parseInt(o2);
		return x1>x2?1:(x1==x2?0:-1);
	}
});
for(String info : list){
	System.out.println(info);
}

String类底层实现了Comparable接口,所以默认sort()排序是升序排列的。
如果排序规则不满足需求,需要使用sort(List<T> list, Comparator<? super T> c)构造器自己来实现排序规则(如上代码)
②List<Object>泛型为自定义对象时
可以通过上面方式外部实现排序接口Comparator
也可以在自定义对象中事先内部排序接口Comparable
package com.sunyuqian.test;

public class Person implements Comparable<Person>{
	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public int compareTo(Person o) {
		return (o.getAge()<this.age)?1:((o.getAge()==this.age)?0:-1);
	}
	
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
}

//通过实体类实现comparable接口来实现内部排序
Person a = new Person("张三",23);
Person b = new Person("王五",43);
Person c = new Person("李四",12);
List<Person> plist = new ArrayList<Person>();
plist.add(a);
plist.add(b);
plist.add(c);
Collections.sort(plist);
for(Person info : plist){
	System.out.println(info.getName()+"--------"+info.getAge());
}


set
HashSet是无序的
LinkedHashSet按照添加顺序访问
TreeSet是可以对set集合进行自定义排序的
//Set<String>的泛型是基本类型时,默认实现了Comparable接口
//默认是按升序排列的
Set<String> treeSet = new TreeSet<String>();
treeSet.add("18");
treeSet.add("4");
treeSet.add("2");
treeSet.add("16");
treeSet.add("18");
treeSet.add("23");
for(String info : treeSet){
	System.out.println(info);
}

//如果不想按升序进行排序,就需要使用TreeSet(Comparator<? super E> comparator)的构造器,自己重新编写排序规则
//set降序输出
Set<String> treeSet = new TreeSet<String>(new Comparator<String>() {
	@Override
	public int compare(String o1, String o2) {
		return o2.compareTo(o1);
	}
});
treeSet.add("18");
treeSet.add("4");
treeSet.add("2");
treeSet.add("16");
treeSet.add("18");
treeSet.add("23");
for(String info : treeSet){
	System.out.println(info);
}
//如何泛型不是基本数据类型的包装类,而是自定义的对象,需要自定义的对象实现Comparable接口或者TreeSet实现外部接口

TreeSet是可以实现Comparator排序接口进行自定义排序规则的。如果不实现该接口默认是按泛型的本身自带的规则进行排序的。


二、Map集合排序:
HashMap无序的
LinkedHashMap按照添加顺序存储的
TreeMap可以实现外部排序接口,默认升序


如果不使用TreeMap需要对HashMap进行排序,可以把Map放到List中使用Collections工具类对HashMap进行key排序或value排序
Map<String,String> map = new HashMap<String, String>();
map.put("1", "ccccccccc");
map.put("4", "aaaaaaaaa");
map.put("2", "ddddddddd");
map.put("3", "bbbbbbbbb");
List<Map.Entry<String,String>> mapList = new ArrayList<Map.Entry<String,String>>(map.entrySet());
Collections.sort(mapList, new Comparator<Map.Entry<String, String>>() {
	@Override
	public int compare(Entry<String, String> o1,
			Entry<String, String> o2) {
		return o1.getKey().compareTo(o2.getKey());
	}
});

for(Map.Entry<String, String> info : mapList){
	System.out.println(info.getKey()+"--------"+info.getValue());
}


三、Comparable与Comparator区别

Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”。

而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
0
0
分享到:
评论

相关推荐

    java List 排序 Collections.sort

    总结起来,`Collections.sort()`是Java中对List进行排序的标准工具,它支持自然排序和自定义排序。了解其工作原理和优化技巧,可以帮助我们在编程实践中更高效地处理数据。通过阅读和理解`Collections.sort()`的源码...

    java中Collections.sort排序详解

    本文详细介绍了Java中的Collections.sort排序机制,包括Comparator接口的使用和实现机制。通过示例代码,展示了如何使用Collections.sort()方法对列表进行排序,并定义了一个Comparator接口的实现类来比较书籍的价格...

    JAVA对list集合进行排序Collections.sort()

    在Java编程语言中,`Collections.sort()` 方法是一个非常重要的工具,用于对List接口实现的集合进行排序。这个方法使得开发者能够方便地按照指定的顺序排列集合中的元素。本篇文章将详细探讨如何使用 `Collections....

    Java Collections.sort()实现List排序的默认方法和自定义方法

    Java Collections.sort()实现List排序的默认方法和自定义方法 Java Collections.sort()是Java语言中用于对List进行排序的方法,通过使用这个方法可以对List进行默认排序,也可以根据需要实现自定义的排序规则。 ...

    java中Collections.sort排序函数用法详解

    在Java编程语言中,`Collections.sort()` 是一个非常重要的函数,它用于对集合中的元素进行排序。这个函数是 `java.util.Collections` 类的一个静态方法,适用于列表(List)类型的集合。`Collections.sort()` 可以...

    详解Java中Collections.sort排序

    在Java编程语言中,`Collections.sort()`方法是一个非常重要的工具,它用于对集合中的元素进行排序。这个方法主要应用于`List`接口的实现类,如`ArrayList`和`LinkedList`等。`Collections.sort()`有两种主要的排序...

    java排序Comparator和Comparable

    在Java编程语言中,排序是数据处理中一个非常常见的需求,而`Comparator`和`Comparable`接口则是实现排序的关键工具。这两个接口都是用于比较对象,但它们的应用场景和使用方式有所不同。 首先,`Comparable`接口是...

    Java集合排序及java集合类详解.pdf

    内容存在一些文字错误和漏识别,但可以推断该文档详细讲解了Java集合类的各个接口以及实现类的特点、用法以及它们之间的区别,并且详细介绍了集合的排序机制,如何利用Comparable和Comparator接口实现排序,以及集合...

    详解java Collections.sort的两种用法

    Java Collections.sort 是 Java 集合框架中的一种静态方法,用于对 List 类型进行排序。该方法有两种参数形式,分别是对基本类型和自定义类的排序。在本文中,我们将通过示例代码来详细介绍这两种用法。 基本类型的...

    用Java集合中的Collections.sort方法如何对list排序(两种方法)

    在Java编程中,集合框架是处理数据的重要工具,而Collections.sort方法则是对列表(List)进行排序的关键函数。本文将深入探讨两种使用Collections.sort方法对List排序的方法。 首先,第一种方法是让List中的对象实现...

    Java 对象排序详解.rar_java 对象排序_对象_排序

    总的来说,Java提供了多种方式对对象进行排序,包括ArrayList的`Collections.sort()`,HashSet的转换和排序,以及TreeSet的自然排序和Comparator排序。理解这些机制可以帮助我们更好地控制数据结构的排序行为,从而...

    java集合排序方法总结共13页.pdf.zip

    Java集合排序涉及的知识点广泛,包括基本的`Collections.sort()`、自定义Comparator、Stream API、并行排序以及泛型等。理解这些概念并熟练运用,能显著提高代码质量和效率。在实际编程中,根据具体需求选择合适的...

    JAVA中Collections工具类sort()排序方法

    在Java编程中,Collections工具类提供了许多方便的集合操作,其中`sort()`方法是一个非常重要的功能,用于对List类型的集合进行排序。本文将详细介绍`Collections.sort()`方法的两种使用方式及其示例。 ### 一、...

    java集合某个字段按照中文拼音排序.docx

    "Java集合某个字段按照中文拼音排序" Java集合某个字段按照中文拼音排序是Java开发中经常遇到的问题。对Java集合中的某个字段按照中文拼音排序可以使用多种方法,本文将介绍两种常见的方法。 方法一:使用...

    List对象集合的排序:比较器Comparator(简单例子)

    在`List`对象集合中使用`Comparator`进行排序,通常需要调用`Collections.sort()`或`list.sort()`方法。例如,假设我们有一个`Person`类,其中包含`name`和`age`属性,我们想要根据年龄对`Person`对象列表进行排序:...

    java中Comparable和Comparator的区别

    当你需要对一个集合(如ArrayList或LinkedList)进行排序时,只需确保其中的元素类型实现了Comparable接口,然后调用Collections.sort()方法即可。 ```java List&lt;String&gt; list = new ArrayList(); list.add("apple...

    listview按序排列显示

    `Collections.sort()`是Java中对List进行排序的方法,它接受一个List作为参数,并根据List中元素的自然顺序或者自定义比较器进行排序。在这个例子中,Map的键(key)通常是字符串或其他实现了Comparable接口的对象,...

    java 集合分组与排序

    Collections.sort(people, Comparator.comparing(Person::getName)); ``` - 流API的`sorted()`:适用于任何可迭代的数据源,可以结合流的其他操作一起使用。例如,按年龄排序并只保留前10名: ```java List...

    java中的排序.ppt

    Java 中的排序可以分为三种类型:简单类型排序、内部对象实现 Comparable 和外部对象实现 Comparator。 简单类型排序 简单类型包括 byte, char, short, int, long, float, double 等数据类型。这些类型不能放在...

    java 使用Collections类对List的排序操作

    在Java编程语言中,`Collections` 类是 `java.util` 包中...在 `MySortList.java` 文件中,可能包含了关于 `Collections.sort()` 方法的具体使用示例,而 `Java.jpg` 可能是一个相关的类图或流程图,帮助理解这些概念。

Global site tag (gtag.js) - Google Analytics