集合框架笔记(上)

原创 2007年09月18日 20:39:00

 今天所学到的知识包括:
      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;
 }
}
 

牛逼笔记:5分钟搞定java集合框架

java集合视频版点击查看   java集合就是一个容器。 1.     集合概述 l       为了保存不确定的数据,或者对象,以及保存具有映射关系的数据。 l       所有的集...
  • bondsui
  • bondsui
  • 2013年01月19日 14:49
  • 2125

Java中的集合框架 笔记

一、集合的概念以及作用:       1.概念:集合是一种工具类,一种容器,可以存储任意数量的具有相同属性的对象;       2.作用:1).在类的内部,对数据进行组织            ...
  • BlueSky_USC
  • BlueSky_USC
  • 2016年07月14日 11:59
  • 398

Collection集合框架和List集合笔记

Collection集合框架和List集合1.什么是集合? 能够存储多个同类型的基本数据类型的容器我们叫数组,那么可以存储多个同类型对象的容器我们就称之为集合!什么是Collection集合框架,通...
  • seaker_
  • seaker_
  • 2015年08月15日 15:47
  • 566

JAVA 笔记(三) 从源码深入浅出集合框架

集合框架概述以Java来说,我们日常所做的编写代码的工作,其实基本上往往就是在和对象打交道。 但显然有一个情况是,一个应用程序里往往不会仅仅只包含数量固定且生命周期都是已知的对象。 所以,就需要通...
  • ghost_Programmer
  • ghost_Programmer
  • 2016年05月25日 17:53
  • 4520

深入理解Java之集合框架

1. 概述     Java集合框架由Java类库的一系列接口、抽象类以及具体实现类组成。我们这里所说的集合就是把一组对象组织到一起,然后再根据不同的需求操纵这些数据。集合类型就是容纳这些对象的一个容...
  • zzz0001
  • zzz0001
  • 2016年03月20日 17:05
  • 2363

Java集合框架学习笔记之集合与Collection API

一、CollectionAPI     集合是一系列对象的聚集(Collection)。集合在程序设计中是一种重要的数据接口。Java中提供了有关集合的类库称为CollectionAPI。     ...
  • HanTangSongMing
  • HanTangSongMing
  • 2014年05月27日 08:22
  • 4599

java毕向东听课笔记27(集合框架-Map)

Map集合:该集合存储键值对。一对一对往里存,而且要保证键的唯一性(一个键最多只能映射到一个值)。                    1.添加                         ...
  • Q375892799
  • Q375892799
  • 2016年04月27日 21:19
  • 557

JAVA常用集合框架源码解析(基于1.8)开题篇

倪升武的博客中有一个小专题,读完之后,发现博主的分析基本是基于JAVA1.7的,这里我基于JAVA1.8给出一些新的解读。因为在彻底浅读完JAVA1.8集合部分之前,我无法了解JAVA1.7与1.8之...
  • qq_16811963
  • qq_16811963
  • 2016年06月18日 11:04
  • 912

常用的web前端框架 --- 集合框架

1.插件集合 (1)jQuery EasyUI    http://www.jeasyui.com/ jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标...
  • tianwei7518
  • tianwei7518
  • 2014年01月22日 10:18
  • 1938

集合框架示意图

如何选择? 1、容器类和Array的区别、择取 * 容器类仅能持有对象引用(指向对象的指针),而不是将对象信息copy一份至数列某位置。 * 一旦将对象置入容器内,便损失了该对象的型别信息。 2、 *...
  • qq_27918787
  • qq_27918787
  • 2016年09月19日 11:05
  • 915
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:集合框架笔记(上)
举报原因:
原因补充:

(最多只允许输入30个字)