码迷,mamicode.com
首页 > 编程语言 > 详细

【JAVA集合框架之工具类】

时间:2014-10-14 22:17:39      阅读:319      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   使用   ar   java   

一、概述

JAVA集合框架中有两个很重要的工具类,一个是Collections,另一个是Arrays。分别封装了对集合的操作方法和对数组的操作方法,这些操作方法使得程序员的开发更加高效。

public class Collections extends Object      全类名:java.util.Collections 
public class Arrays extends Object           全类名:java.util.Arrays 

 

 

 

 

二.Collections类。

1.Collections.sort方法。

public static <T extends Comparable<? super T>> void sort(List<T> list)
public static <T> void sort(List<T> list, Comparator<? super T> c)

 

 

 

(1)示例。

现在有一些字符串,可能有重复元素,想要将它们存入一个容器中并按照一定的规则进行排序,该怎么做?

思路:使用ArrayList集合进行存储并使用Collections.sort方法进行排序。

bubuko.com,布布扣
 1 package p01.ColletionsDemo.p01.SortDemo;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 
 6 public class SortDemo {
 7 
 8     public static void main(String[] args) {
 9         Demo1();
10 
11     }
12     private static void Demo1() {
13         ArrayList<String>al=new ArrayList<String>();
14         al.add("abc");
15         al.add("bca");
16         al.add("aab");
17         al.add("bac");
18         al.add("cba");
19         System.out.println("排序前:"+al);
20         Collections.sort(al);
21         System.out.println("排序后:"+al);
22     }
23 
24 }
View Code

这是按照字符串的自然排序方式排序的代码,即输出结果的字符串是按照字典序排序的。

现在有了新的需求,即按照字符串长度排序,如果字符串长度相同按照字典序排序,这时候需要使用比较器。

bubuko.com,布布扣
 1 package p01.ColletionsDemo.p01.SortDemo;
 2 
 3 import java.util.ArrayList;
 4 import java.util.Collections;
 5 import java.util.Comparator;
 6 
 7 public class SortDemo {
 8     public static void main(String[] args) {
 9         //Demo1();
10         Demo2();
11     }
12     /*
13      * Demo2:该方法采用带比较器的Collections.sort方法
14      */
15     private static void Demo2() {
16         ArrayList<String>al=new ArrayList<String>();
17         al.add("abcd");
18         al.add("abc");
19         al.add("bc");
20         al.add("aabadsf");
21         al.add("b");
22         al.add("cbae");
23         al.add("bade");
24         System.out.println("排序前:"+al);
25         Collections.sort(al,new ComparatorByLength());
26         System.out.println("排序后:"+al);
27     }
28     /*
29      * Demo1:该方法使用的是不带比较器的Collections.sort方法。
30      */
31     private static void Demo1() {
32         ArrayList<String>al=new ArrayList<String>();
33         al.add("abc");
34         al.add("abc");
35         al.add("bca");
36         al.add("aab");
37         al.add("bac");
38         al.add("cba");
39         System.out.println("排序前:"+al);
40         Collections.sort(al);
41         System.out.println("排序后:"+al);
42     }
43 
44 }
45 class ComparatorByLength implements Comparator<String>
46 {
47 
48     @Override
49     public int compare(String o1, String o2) {
50         int temp=o1.length()-o2.length();
51         return temp==0?o1.compareTo(o2):temp;
52     }
53     
54 }
View Code

两个重载方法使用起来非常方便,但是其实现原理是什么也需要了解。

(2)模拟不使用比较器的sort方法。

bubuko.com,布布扣
  1 package p01.ColletionsDemo.p02.SortDemo;
  2 
  3 import java.util.ArrayList;
  4 import java.util.List;
  5 
  6 class Person implements Comparable<Person>
  7 {
  8 
  9     private String name;
 10     private int age;
 11     @Override
 12     public String toString() {
 13         return "Person [name=" + name + ", age=" + age + "]\n";
 14     }
 15     public String getName() {
 16         return name;
 17     }
 18     public void setName(String name) {
 19         this.name = name;
 20     }
 21     public int getAge() {
 22         return age;
 23     }
 24     public void setAge(int age) {
 25         this.age = age;
 26     }
 27     public Person(String name, int age) {
 28         super();
 29         this.name = name;
 30         this.age = age;
 31     }
 32     public Person() {
 33         super();
 34     }
 35     @Override
 36     public int compareTo(Person o) {
 37         int temp=this.age-o.getAge();
 38         return temp==0?this.name.compareTo(o.getName()):temp;
 39     }
 40 }
 41 class Student extends Person
 42 {
 43 
 44     public Student() {
 45         super();
 46     }
 47 
 48     public Student(String name, int age) {
 49         super(name, age);
 50     }
 51     
 52 }
 53 class Worker extends Person
 54 {
 55 
 56     public Worker() {
 57         super();
 58     }
 59 
 60     public Worker(String name, int age) {
 61         super(name, age);
 62     }
 63     
 64 }
 65 
 66 public class SortDemo {
 67     /**
 68      * 该类模拟带不带比较器的Collections.sort方法。
 69      * @param args
 70      */
 71     public static void main(String[] args) {
 72 
 73         Demo1();
 74     }
 75 
 76     private static void Demo1() {
 77         ArrayList<Person>al=new ArrayList<Person>();
 78         al.add(new Person("lisi",24));
 79         al.add(new Person("wangwu",25));
 80         al.add(new Person("zhangsan",23));
 81         al.add(new Person("chenqi",27));
 82         al.add(new Person("zhaoliu",26));
 83         
 84         System.out.println("排序前:"+al);
 85         MyCollections.sort(al);
 86         System.out.println("排序后:"+al);
 87     }
 88 
 89 }
 90 /*
 91  * 使用自定义Collections类
 92  */
 93 class  MyCollections
 94 {
 95     public static <T extends Comparable<? super T>> void  sort(List <T>list)
 96     {
 97         for(int i=0;i<=list.size()-2;i++)
 98         {
 99             for(int j=i+1;j<=list.size()-1;j++)
100             {
101                 if( list.get(i).compareTo(list.get(j))>0)
102                 {
103                     T t=list.get(i);
104                     list.set(i, list.get(j));
105                     list.set(j, t);
106                 }
107             }
108         }
109     }
110 }
View Code

改程序的核心就是MyColletions类了:

bubuko.com,布布扣
 1 class  MyCollections
 2 {
 3     public static <T extends Comparable<? super T>> void  sort(List <T>list)
 4     {
 5         for(int i=0;i<=list.size()-2;i++)
 6         {
 7             for(int j=i+1;j<=list.size()-1;j++)
 8             {
 9                 if( list.get(i).compareTo(list.get(j))>0)
10                 {
11                     T t=list.get(i);
12                     list.set(i, list.get(j));
13                     list.set(j, t);
14                 }
15             }
16         }
17     }
18 }
View Code

 

【JAVA集合框架之工具类】

标签:style   blog   http   color   io   os   使用   ar   java   

原文地址:http://www.cnblogs.com/kuangdaoyizhimei/p/4025021.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!