【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方法进行排序。

 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 }

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

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

 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 }

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

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

  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 }

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

 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 }

时间: 2024-10-13 19:31:10

【JAVA集合框架之工具类】的相关文章

Java:集合框架的工具类

集合框架的工具类 Arrays:里面都是静态方法,直接用来对各种集合进行操作的公有方法. Collections:里面都是静态方法,直接用来对各种集合进行操作的公有方法. 包括: 1.asList将数组变成list集合: static <T> List<T> asList(T... a) 返回一个受指定数组支持的固定大小的列表. //例子1: import java.util.*; class ArraysTest { public static void sop(Object o

集合框架的工具类

Array —将数组转为其他形式   Arrays:集合框架的工具类,里面的方法都是静态的. (1) Arrays.toString(arr)  将数组转为字符串. (2) Arrays.asList(arr)     将数组转为List集合. 好处:可以使用集合的方法操作数组中的元素.注意:数组的长度是固定的,所以对于集合的增删方法是不可以使用的.否则会发生异常. public class ArraysDemo { public static void main(String[] args)

Java集合框架之LinkedList类

ArrayList用数组作为其保存元素的数据结构,而LinkedList采用的是链表的数据结构.而ArrayList和LinkedList都是线性表list.但LinkedList并不具备随机访问能力,而ArrayList拥有. 对于链表集合,首先(1)我们使用API里现成的LinkedList类来进行一些分析,之后(2)我们再用自身的java代码实现链表及其LinkedList中相对应的方法. (1)现成API接口的分析使用 定义如下,与ArrayList类似. LinkedList<Stri

Java集合框架之ArrayList类

ArrayList是一个泛型数据结构,即对象/引用类型是在<E>里进行确定的(E中定义的必须是对象/引用).例如,定义一个字符串类型的ArrayList为如下格式: ArrayList<String> test = new ArrayList<String>(); 我们可以看出,ArrayList<String>被看成了一个整体. 下面我们看一个简单的例子.代码如下: import java.util.ArrayList; public class Arra

异常处理、常用类、Java集合框架、反射

异常处理: 1.  异常:程序在执行过程中所产生的问题. 异常的三种类:①检查异常:又叫checdked异常或者受检异常.通常是用户错误或者不能被程序员所预见的问题.检查异常需要被解决之后才能通过编译. ②运行时异常:程序在运行过程中可能发生的.可以被程序员所避免的异常类型. ③错误:事实上错误不是异常,但却是用户和程序员无法控制的问题. 2.  异常的控制流程: 异常是被一个方法抛出的对象. (1) 处理异常的三个方法:①捕获这个异常,不让它沿着调用栈继续向下抛. ②捕获这个异常,并继续向下抛

集合中的工具类Collections和Arrays

集合框架的工具类: Collections: 方法sort(): List<String> list = new ArrayList<String>();        list.add("gfhd");        list.add("abc");        list.add("a");        list.add("aaaadfs");sort(list);//按自然顺序排列,String

Java集合框架(二)day_16

16.集合框架(去除ArrayList中重复字符串元素方式)(掌握) public class Demo1_ArrayList { /** * * A:案例演示 * 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) * 思路:创建新集合方式 */ public static void main(String[] args) { ArrayList list = new ArrayList(); list.add("a"); list.add("a"

Java集合框架--List、Set、Map

Java集合框架接口和类的层次结构: java.util.Collection [I] +--java.util.List [I] +--java.util.ArrayList [C] +--java.util.LinkedList [C] +--java.util.Vector [C] +--java.util.Stack [C] +--java.util.Set [I] +--java.util.HashSet [C] +--java.util.SortedSet [I] +--java.u

13弹;集合中的工具类Collections和Arrays

集合框架的工具类: Collections: 方法sort() System.out.println(list); // 自然排序 Collections.sort(list); System.out.println(list); // 按照字符串长度排序,再自然排序 Collections.sort(list,new Compare()); System.out.println(list); binarySearch 方法 前提是此集合必须是有序的 返回插入位置 角标的负数再减一: fill方