`
heimeiyingwang
  • 浏览: 94942 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

corejava辅导(8--1)

阅读更多

集合类

 

集合(集合类的对象)是管理其他若干对象的,类似于C++标准模板库中的容器,不过JAVA的集合类的对象中可以存放多种类型的对象。

 

接口和类共同构成了一个集合框架,集合的概念,一个对象可以装载多个对象,就是集合对象。

 

集合框架

1,集合接口

 Collection接口

                          List接口

              Set接口

              SortedSet接口

 

 

Collection 存储并管理多个对象的对象,集合中的每个元素都是对象。

 

MapMap中没有对象,而是键值对,由Keyvalue组成的键值对,Key是不可重复的。value是可以相同的,Keyvalue一一对应的。

 

集合中用到的类,接口在java.util包中,使用时注意将其引入import

 

Collection 接口(以下介绍其子接口)

 

1)List ,一个List的实现类的对象在管理多个对象时会按顺序组织对象(即按照将对象放入的顺序存储),List实现类的对象是有顺序的,List实现类对象中的内容是是可重复的。(注意,顺序和排序的区别)

 

2)Set ,一个Set的实现类表示一个数学概念上的集合,Set的实现类的对象中的元素是无顺序的,也就是不会按照输入顺序来存放,Set的实现类对象中的元素是不重复的。

 

3)SortedSet,他是Set的子接口,他的实现类会对集合中的元素进行排序。但是要指定排序规则,他会按排序规则进行排序。

 

Map 接口(以下介绍其子接口)

                                              Map接口

 

SortedMap接口

 

 

 

 

 

SortedMap,这个接口的实现类同样可以实现,不过是对键值对中的Key进行排序,这个接口的实现类也是要指定排序规则的。

 

JDK1.4中的集合是不安全的对象,JDK5.0中解决了这个问题。

 

2,接口的实现类

 

List接口的实现类

                       List接口

ArrayList

LinkedList

                                Vector

1 ArrayList是接近于数组功能的集合类,ArryList的实质就是一个会自动增长的数组,ArrayList是用封装的数组来实现的List接口的。

 

Collection的实现类对象的遍历方式是用迭代来实现的。

在使用迭代器时先要活得一个迭代器的对象,Iterator(迭代器接口)这是一个接口,迭代器是在集合类中实现的,也就是说,他是一个内部类(匿名内部类)实现的。

Iterator接口中定义的常用方法方法hasNext()next()

hasNext(),这个方法会使用一个游标,并通过判断游标指向的位置是否存放有对象。

next()方法也是Iterator接口中定义好的方法,这个方法会使游标指向下一个元素的位置,游标会跳过第一个元素,并返回其中的内容。

 

Collections注意,这个不是Collection接口 这是一个工具类,也是java.util包中的,这个类中的sort(list接口的实现类的对象)方法,其参数是一个集合类的对象,这个方法使用来对集合类的对象进行排序的。以后,我将以集合这个名字来称呼集合类的对象。,对于字符串对象内容的集合来说会按字典顺序排序(升序),对于数字内容的集合排序也会按照升序排序。

 

集合排序

 

排序可一份为两部分内容,一个是排序的规则,也就是按照什么来进行排序,并且排成什么样的顺序。第二个就是排序的算法,他决定了排序的效率。

 

在对自定义的集合内容类型排序时,需要先定义那个类型的排序规则。

Comparable接口,这个接口中只定义了一个compareTo(Object o),方法的返回至类型是整型,如果当前对象大于参数对象就返回正数,当前对象等于参数对象是就返回0,当前对象小于参数对象时就返回负值,这样写就是升序排列,反之则是进行降序排列,在实现这个接口中的方法时,返回值定义方式,只有这两种。

 

根据指定类型的排序规则实现了Comparable接口,那么就可以对存有这个类型的集合进行整体排序。Comparable接口,也叫做可比较接口。这个接口在java.lang包下。只要实现了这个接口,就是可排序的。

 

接下来介绍另外一种对自定义类型对象的集合整体排序的方法,也就是实现比较器接口(Comparator),这个接口中定义了一个compare(Object o1Object o2)方法来比较两个对象,这个方法的返回值定义和上面介绍的那个方法是一样。

 

注意:在API,帮助文档中以上两个方法的参数类型是T,这代表的模板类型,也就是集合中存放的内容的类型,在JDK1.4中其参数就是Object类型,模板类型的详细内容会在最后的JDK5.0新特性中讲到。

 

Comparator接口可以在匿名内部类中实现,Collections 中的sort(集合了的对象,比较器)方法,可以对自定义类型内容的集合进行整体排序。

 

集合排序的实例:

 

public class Employee implements Comparable{

     private String name;

     private int age;

     private double salary;

     public Employee(String name, int age, double salary) {

         super();

         // TODO Auto-generated constructor stub

         this.name = name;

         this.age = age;

         this.salary = salary;

     }

     public int getAge() {

         return age;

     }

     public void setAge(int age) {

         this.age = age;

     }

     public String getName() {

         return name;

     }

     public void setName(String name) {

         this.name = name;

     }

     public double getSalary() {

         return salary;

     }

     public void setSalary(double salary) {

         this.salary = salary;

     }

     public String toString() {

         return name+" "+age+" "+salary;

     }

     public int compareTo(Object o){//默认是升序排列,也可以使用降序

         Employee e=(Employee)o;

         if (this.age<e.getAge()) return 1;

         else if (this.age()>e.getAge()) return -1;

         else if (this.salary()<e.getSalary()) return 1;

         else if (this.salary>e.getSalary()) return -1;

         else return this.name.compareTo(e.getName());

     }

}

 

import java.util.*;

public class TestEmployee {

     public static void main(String[] args){

         List l=new ArrayList();

         l.add(new Employee("Liucy",40,2000));

         l.add(new Employee("Hiloo",40,8000));

         l.add(new Employee("Chenzq",18,300));

         l.add(new Employee("George",45,10000));

         l.add(new Employee("BaoJie",18,300));

         Collections.sort(l);

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics