ArrayList排序

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Collections;
 6
 7 namespace ArrySort
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             ArrayList arry = new ArrayList() { new Person() { Name = "apple", Age = 12 }, new Person() { Name = "dog", Age = 64 }, new Person() { Name = "cat", Age = 41 } };
14             Console.WriteLine("排序之前");
15             for (int i = 0; i < arry.Count; i++)
16             {
17                 Console.WriteLine(((Person)arry[i]).Name);
18             }
19             arry.Sort();
20             Console.WriteLine("排序之后");
21             for (int i = 0; i < arry.Count; i++)
22             {
23                 Console.WriteLine(((Person)arry[i]).Name);
24             }
25             Console.ReadKey();
26         }
27
28         public class Person : IComparable//实现IComparable接口,则可以调用排序方法Sort(),否则对于有多个参数的对象,Sort()方法不知道该具体比较哪一项
29         {
30             public string Name { get; set; }
31             public int Age { get; set; }
32
33
34             public int CompareTo(object obj)//返回值>0表示比比较对象大,=0跟比较对象相等,<0比比较对象小
35             {
36                 Person p = obj as Person;//因为传入的是object类型,所以要将传入的参数转换为需要比较的类型
37                 if (p == null)
38                 {
39                     throw new ArgumentException();//参数无效异常
40                 }
41                 else
42                 {
43                     //return this.Age - p.Age;//可以自定义按照类型的某一属性进行比较
44                     return this.Name.Length - p.Name.Length;
45                 }
46             }
47         }
48     }
49 }

实现IComparable接口,则ArrayList可以调用排序方法Sort(),否则对于有多个参数的对象,Sort()方法不知道该具体比较哪一项

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Collections;
 6
 7 namespace UseOfICompare
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             ArrayList array = new ArrayList() {new Person(){Name = "Alice",Age = 42},new Person(){Name = "dog",Age = 62},new Person(){Name = "cat",Age = 15}};
14             Console.WriteLine("比较前");
15             for (int i = 0; i < array.Count; i++)
16             {
17                 Console.WriteLine(((Person)array[i]).Name);
18             }
19
20             //array.Sort(new CompareByNameLength());
21             array.Sort(new CompareByAge());
22
23             Console.WriteLine("比较之后");
24             for (int i = 0; i < array.Count; i++)
25             {
26                 Console.WriteLine(((Person)array[i]).Name);
27             }
28             Console.ReadKey();
29         }
30     }
31
32     public class Person
33     {
34         public string Name { get; set; }
35         public int Age { get; set; }
36     }
37
38     public class CompareByNameLength : IComparer//实现IComparer接口,其实是做了一个比较器,比较器专门用来比较某一项,将比较器作为参数传入ArrayList的排序Sort()方法就可以实现比较了
39     {
40         public int Compare(object x, object y)//同样返回值是>0,<0,=0
41         {
42             Person p1 = x as Person;
43             Person p2 = y as Person;
44             if (p1 == null && p2 == null)
45             {
46                 throw new ArgumentException();//参数类型错误异常
47             }
48             else
49             {
50                 return p1.Name.Length - p2.Name.Length;//按姓名长度比较
51             }
52         }
53     }
54
55     public class CompareByAge : IComparer
56     {
57         public int Compare(object x, object y)
58         {
59             Person p1 = x as Person;
60             Person p2 = y as Person;
61             if (p1 == null && p2 == null)
62             {
63                 throw new ArgumentException();//参数类型错误
64             }
65             else
66             {
67                 return p1.Age - p2.Age;
68             }
69         }
70     }
71
72 }

就一个Person对象来说,如果有两个属性,分别为Name和Age,如果某个时段想用Name长度来作为比较,某个时段想用Age大小来作为比较,如果让Person实现ICompareable接口就不太合适了,因为实现ICompareable接口再调用ArrayList的Sort()方法对按照在比较Person类中定义的规则进行一项的比较。

public int Compare(object x, object y)方法中传入两个对象是内部实现,只需要调用array.sort(new XXXXX());就可以了。

时间: 2024-10-28 10:14:15

ArrayList排序的相关文章

Java ArrayList排序方法详解

由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在添加和移除元素的时候进行动态的扩展和缩减.你可能已经使用过 ArrayList,因此我将略过基础部分.如果你对 ArrayList 还不熟悉,你可以参考它的 API 文档,可以很容易理解在 ArrayList 上执行基本的操作.In this post, I will discuss one of

自定义方法实现ArrayList排序

1 package cn.edu.nwpu.java; 2 3 import java.util.ArrayList; 4 import java.util.Collection; 5 6 import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Collections; 7 8 public class MyScore { 9 10 public static void main(String[] args) { 11 // 实

java自定义ArrayList排序, 大神略过

一个list里面有两种对象,现在有个需求必须对不同的对象的日期来排序,以下是代码 /** *@author 肖华 [email protected] */ List<Message> messages=messageSrv.getList(u.getUserId()); List<Object> messageList=new ArrayList<Object>(); for(Object o:messages){ messageList.add(o); } for(O

ArrayList排序Sort()方法(转)

//使用Sort方法,可以对集合中的元素进行排序.Sort有三种重载方法,声明代码如下所//示. public void Sort(); //使用集合元素的比较方式进行排序 public void Sort(IComparer comparer); //使用自定义比较器进行排序 public void Sort(int index, int count, IComparer comparer) //使用自定义比较器进行指定范围的排序 注意:为使用Sort方法进行排序,集合中的所有元素必须实现IC

ArrayList排序 降序排列

1 public class Person { 2 String name; 3 int age; 4 public Person(String name, int age) { 5 this.name = name; 6 this.age = age; 7 } 8 public int getAge() { 9 return age; 10 } 11 public void setAge(int age) { 12 this.age = age; 13 } 14 public String g

Java数据结构与排序

一.引子:想要给ArrayList排序却发现没有排序方法?你有两种选择:        1.换用TreeSet:     2.使用Collection.sort(List<T> list) / Collection.sort(List<T> list, Comparator<? super T> c)方法. 二.展开分析Java的几种主要数据结构及其排序方法: LinkedList 高效操作元素 TreeSet  不重复,有序 HashSet 不重复,快速查找 Hash

ArrayList List&lt;T&gt; T[] Array

ArrayList 其实就是一个存储obj列表的类 ArrayList 接受 null 作为有效值并且允许重复的元素. 不保证会对 ArrayList 排序. 在执行需要对 ArrayList 排序的操作(如 BinarySearch)之前,必须对 ArrayList 进行排序. ArrayList 的容量是 ArrayList 可以保存的元素数.随着向 ArrayList 中添加元素,容量通过重新分配按需自动增加.可通过调用 TrimToSize 或通过显式设置 Capacity 属性减少容量

【转】Hashtable排序的几种方法

很多文章都有写到Hashtable有内部的排序机制,如果要自定义排序的话就要自己写算法来实现的:听起来很抽象,我一向喜欢简单实用的东西,我下面就来总结总结怎样来实现自定义排序Hashtable.先看看普通的Hashtable的基本实现:   public static void Main()        {            Hashtable ht = new Hashtable();            ht.Add("key1", "value1");

Android--JSONArray排序

1.先把JSONArray放在一个ArrayList里边,利用ArrayList排序 JSONArray mJSONArray; protected void sortJsonArrayByDate(String dateName){    List<JSONObject> list = new ArrayList<JSONObject> ();    JSONObject jsonObj = null;    for (int i = 0; i < mJSONArray.l