`
liudeh_009
  • 浏览: 242511 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java的容器排序

    博客分类:
  • JDK
阅读更多

    在项目开发中,经常回用到容器排序,而它们的写法比较固定,今天就来总结一下.

pojo类如下:

package com.ldh;

public class Student implements Comparable<Student> {
    private int    id;
    private String name;
    private int    age;

    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }

    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(Student o) {
        return new Integer(age).compareTo(new Integer(o.getAge()));
    }
}

    再创建四个Student对象:

    

   Student st1 = new Student();
    st1.setName("zhangsan1");
    st1.setId(1);
    st1.setAge(30);
    
    Student st2 = new Student();
    st2.setName("zhangsan2");
    st2.setId(2);
    st2.setAge(20);
    
    Student st3 = new Student();
    st3.setName("zhangsan3");
    st3.setId(3);
    st3.setAge(10);
    
    Student st4 = new Student();
    st4.setName("zhangsan4");
    st4.setId(4);
    st4.setAge(10);
    用TreeSet对上述四个Student对象排序并打印出结果:
   Set<Student> set = new TreeSet<Student>();
    set.add(st1);
    set.add(st2);
    set.add(st3);
    set.add(st4);
    
    for(Student st : set){
        System.out.println(st.getAge());
    }
    System.out.println(set.size());

 

打印出的结果如下:

 10

 20

 30

 3

TreeSet底层排序算法是二叉树,如果两个元素比较的结果为0,就被视为同一个元素.如果 Student没有实现Comparable接口,也可以通过以下方式实现排序:

 

Set<Student> set = new TreeSet<Student>(new Comparator<Student>() {
		@Override
		public int compare(Student o1, Student o2) {
			 return new Integer(o1.getAge()).compareTo(new Integer(o2.getAge())                  );
		}
	});
        最终打印出的结果和实现Comparable接口一样.TreeSet的底层实现结构是TreeMap,TreeSet就是value都相同的TreeMap,因此TreeMap也有上述两种排序方式.

 

    再看来看一下List的排序,同样是上面的四个对象,都实现Comparable接口.
    List<Student> slist = new LinkedList<Student>();
    slist.add(st1);
    slist.add(st2);
    slist.add(st3);
    slist.add(st4);
    Collections.sort(slist);
    for(Student st : slist){
        System.out.println(st.getAge());
    }
    System.out.println(slist.size());
     上面这段代码打印的结果是
      10
      10
       20
       30
        4
       通过上面的结果可以看到,List排序四个元素都打印出来,并且按正序排序,如果想按倒序排序,只需要
 @Override
    public int compareTo(Student o) {
        return -new Integer(age).compareTo(new Integer(o.getAge()));
    }
        在原来的基础上加一个"-"负号就可以了.
        同样List也可以用实现Comparator接口进行排序,如下:
       
 List<Integer> list = new LinkedList<Integer>();
  list.add(new Integer(5));
  list.add(new Integer(3));
  list.add(new Integer(4));
  list.add(new Integer(3));
  Collections.sort(list, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o1 - o2;
        }
    });
    for(Integer letter : list){
        System.out.println(letter);
    }
    System.out.println(list.size());
    
    排序结果:
    3
    3
    4
    5
    4      
         List的实现ArrayList也同样可以上面的两种排序,LinkedList是链表结构,增加,删除效率高,但查找由于要移动指针,效率就低了.ArrayList底层的实现了基于动态数组的数据结构,查找效率高,但增加,删除由于涉及到数据移动,效率就没有LinkedList高了.实际项目具体用哪一个,看实际情况.
      对于容器排序是实现Comparable接口还是Comparator接口,我推荐Comparator接口,因为Comparator与原来的代码的耦合性低,比如刚开始的需求不需要排序,而后来又需要排序,但又想尽量少动原来的代码,Comparator接口就比较适合了.同时对于同一个对象,有的地方想这样排,另一个地方又想那样排,这是你发现还是Comparator比较好,多实现几个Comparator就行了.
 
 
 
 
分享到:
评论

相关推荐

    秘钥容器排序源代码JAVA

    密钥是一种参数,它是在明文转换为密文或将密文转换为明文的...将秘钥容器中的所有秘钥按照f(k)升序排列,以便观察秘钥的安全性。 数据结构综合应用、排序算法综合应用、算法设计 程序可在eclipse直接导入,亲测可用

    java容器详细解析

    Java容器详细解析 Java容器是一种基本的数据结构,用于存储和管理对象。Java容器主要分为两大类:Collection和Map。 Collection Collection是一个独立元素的序列,这些元素都服从一条或多条规则。Collection接口...

    java容器学习心得

    ### Java容器学习心得详解 在Java编程中,容器(Containers)是存储和操作对象集合的重要工具,主要包括集合(Collections)和映射(Maps)。本文将深入解析Java容器的关键概念、特性以及不同容器类型的应用场景。 ...

    JAVA容器对象整理

    这篇博客"JAVA容器对象整理"可能涵盖了关于Java中的不同容器类、接口以及它们的使用方式。在这里,我们将深入探讨一些核心的Java容器知识点。 1. **ArrayList与LinkedList** - `ArrayList`是一个基于数组实现的...

    JAVA容器知识积累

    Java容器是Java编程中至关重要的一个部分,它们用于存储、管理和操作对象集合。在这个主题下,我们将深入探讨Java中的核心容器类,包括数组、List、Set和Map,以及它们各自的特点和使用场景。 1. **数组**:数组是...

    Java选择排序算法源码

    这是存放待排序数据的容器。 ```java public static void selectionSort(int[] arr) { ``` 2. **外层循环**:遍历数组的所有元素,用i表示当前处理的位置。 ```java for (int i = 0; i ; i++) { ``` 3. **内层...

    JAVA容器的作用和概览

    Java容器(集合框架)是Java编程中极其重要的部分,它提供了多种数据结构,如列表、集合和映射,以适应不同场景下的数据存储和处理需求。通过合理选择和使用不同的容器,可以优化代码的性能和可维护性。同时,了解和...

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

    ### Java集合排序及Java集合类详解 #### 一、集合框架概述 集合框架是Java编程语言的核心组件之一,用于组织和操作数据集。Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构...

    java练习题--容器使用练习

    通过这些练习,你将巩固对Java容器的理解,提高代码编写效率,并为解决实际问题打下坚实基础。记得在实践中不断挑战自己,尝试不同的场景和数据结构,以便更好地掌握Java容器的精髓。祝你在学习过程中取得优异的成绩...

    java容器(持有对象)

    在Java编程中,容器是用来存储和管理对象的类或接口,它们使得我们可以在程序中方便地组织和操作数据。在Java中,常见的容器主要分为三类:List、Set和Map,这些都是Java集合框架的重要组成部分。 首先,我们来看...

    java类容器总结文档

    Java 类容器是 Java 编程中非常重要的一个概念,它主要指的是 Java 集合框架中的各种类,如 ArrayList、LinkedList、HashSet、HashMap 等,这些类用于存储和管理对象。本文将深入探讨这些常用的Java类容器,帮助...

    JAVA 容器类应用

    Java容器类是Java集合框架的重要组成部分,它们提供了一种存储、管理和操作对象的方式。在Java中,容器类包括数组、列表、队列、集、映射等数据结构,它们为开发者提供了灵活的数据处理能力。本篇文章将深入探讨Java...

    java容器类 是初学者很好的学习材料

    Java容器类是Java编程语言中不可或缺的一部分,它们主要用于存储和管理对象。这些类和接口位于`java.util`包中,为开发者提供了灵活的数据结构和数据操作方式。在Java中,容器类主要分为两大类:Collection和Map。 ...

    JAVA容器试题.docx

    【JAVA容器试题解析】 一、不定选择题 1. Java 容器框架主要分为 Collection 和 Map 两种。其中,Collection 又分为A、List,B、Set,C、Queue,D、以上都是。答案:D。 2. 以下哪一个是线程安全的:A、Vector,B...

    java容器简介.txt

    ### Java容器简介 #### Array(数组) 在Java中,**数组**是一种基本的数据结构,用于存储固定大小的同类型元素集合。数组中的每个元素都可以通过索引进行访问,索引通常是从0开始的整数。 - **声明与初始化**:...

    java中容器是什么意思?

    在Java编程语言中,容器(Container)是一种用来存储和管理数据结构的重要概念,它提供了组织、存储和操作数据的方式。容器通常指的是集合框架中的各种类,如List、Set、Map等,它们允许开发者以不同的方式存储和...

    java中的排序.ppt

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

    JAVA容器总结

    Java容器,主要包括集合框架中的Set、List、Map和Queue接口,它们是Java编程中处理数据的重要工具。下面将对这些接口及其常见的实现类进行详细解释。 1. **Set接口**: Set接口代表一个无序且不允许重复元素的集合...

    Java容器.xmind

    对键进行排序 HashTable 标记: class Properties 标记: class 线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。 Collections 标记: 均以synchronized实现, 性能没用提高 synchronizedCollection...

Global site tag (gtag.js) - Google Analytics