翔宇.杨的技术仓库

小楼一夜听春雨

集合框架笔记(上)

 今天所学到的知识包括:
      java.util包中的List接口,Collection接口,Comparator接口,Iterator接口,以及实现了List接口的ArrayList类,及Collections类,顺便复习了一下toString()函数和compareTo()函数。
      Collection接口是集合类中的根接口,所有的接口都继承自它。
      今天的重头戏是ArrayList类,可以把它理解为C语言下的一个链表,通常用一个称为“迭代子”的接口来访问它。这个迭代子就是Iterator接口,虽然它被放在java.util包下的interface一类中,但是实际上可以把它实例化。语法如下。
                 Iterator i=某个集合类对象.iterator();
      这里的iterator()是java.util包下几乎所有类中都存在的一个函数,用以返回一个与该类对象相关联的迭代子。这里很奇怪,为什么接口能够实例化,我还在寻找答案。
      将迭代子与某个集合类对象关联后,就可以通过迭代子中的成员函数hasNext(),next(),以及remove()来访问集合类对象中的元素了。迭代子最先指向该集合类对象的第一个元素之前,hasNext()函数将判断接下来是否有元素存在,如果没有则返回0;next()函数将返回接下来的第一个元素;remove()用于删除迭代子所在位置的前一个元素。
      ArrayList类本身类似于C语言中的链表,它提供了一个toArray()函数用于将其对象内的元素转换为一个Object[]类型的数组。
     
      Collections是一个很有用的类,它比Collection接口只多了一个s,但是差之千里。Collections类中全部是静态方法,因此这个类也就没有实例化的意义。它提供了几个很有用的函数。Collections.sort(集合类对象),由于将集合类对象中元素按照自然顺序排列,如果集合类对象中的元素是引用类型,无法直接比较,那么还需要重写toCompare()函数,并且要重写toString()函数,便于打印输出。另外,还有一种更外高明但是也更为复杂的排序方式Collections.sort(集合类对象,Comparator T).
      这里的Comparator是个什么东东?它也是java.util包中的一个接口,称为“比较器”,sort方法将按照比较器中指定的方法来对元素进行比较。跟Iterator一样,它也是需要实例化的。它有2个成员函数,int compare(object o1,objcet o2),boolean equals(objcet o),分开说明。
      compare(object o1,objcet o2),该函数提供比较的标准,一般来说,在函数内部,我们需要把object o1和object o2转换为所需要比较的集合类,这样才可以将compare()函数与集合类相关联。如果你想认为如果o1比o2大,那么返回正数,如果o1比o2小,则返回负数,否则返回0。JAVA编译器是很笨的,它只会根据返回的值是正数,负数,或者0来判断大小。
      而equals()函数在java.lang.object类中已经存在,所以一般在实现Comparator接口中的类中,就算是不实现该方法,编译的时候也一样不会报错。
    
     排序之后,还可以用Collections.binarySearch(parament,parament)在已经排序过的对象中进行查找,是不是很像Array类呢?

 

附今天写的代码

import java.util.*;
class ArrayListTest
{
 public static void IteratorTool(Collection c)
 {
  Iterator i=c.iterator();
  while(i.hasNext())
     System.out.println(i.next());   
 }
 public static void main(String[] args)
 {
  Player p1=new Player(1,"zhangsan");
  Player p2=new Player(3,"wangwu");
  Player p3=new Player(2,"lisi");
  ArrayList arr=new ArrayList();
  arr.add(p1);
  arr.add(p2);
  arr.add(p3);
  IteratorTool(arr);
  System.out.println("there are"+arr.size()+"elements");
  Collections.sort(arr);
  IteratorTool(arr);
  Collections.sort(arr,new Player.ComparatorAble());
  IteratorTool(arr);
  Object[] flag=arr.toArray();
  for(int i=0;i<flag.length;i++)
      System.out.println(flag[i]);
 }
}
class Player implements Comparable
{
 Player(int id,String name)
 {
  this.id=id;
  this.name=name;
 }
 int id;
 String name;
 static class ComparatorAble implements Comparator
 {
  public int compare(Object o1,Object o2)
  {
   Player p1=(Player)o1;
   Player p2=(Player)o2;
   if(p1.id>p2.id)
      return -1;
      else if(p1.id==p2.id)
          return 0;
          else
              return 1;
  }
 }
 public int compareTo(Object o)
 {
  Player p=(Player)o;
  if(id>p.id)
     return 1;
     else if(id==p.id)
         return 0;
         else
            return 0;
 }
 public String toString()
 {
  return id+":"+name;
 }
}
 

阅读更多
想对作者说点什么? 我来说一句

Java基础笔记集合框架和泛型

2016年07月31日 36KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭