类集

  • 类集就是一个动态的对象数组:可以改变大小
  • JAVA类集接口框架:

    1 Collection       元素的类集

    2 List         元素的序列

    3 Set      没有重复元素的类集

    4 SortedSet    没有重复元素且排序的类集

    5 Map      元素为二元偶对的汇集,不能重复

    6 SortedMap   在Map基础上加上排序的要求

    7 Iterator    一个可遍历总额类集的对象

    8 ListIterator      可遍历一个序列的List的对象

  • 以上这些全部是接口,我们只要掌握最核心的三个即可:
  1. Collection:存放的是一个一个的对象,每次存放当个对象s
  2. Map:每次存放一对值:Key----value
  3. Iterator:输出接口,只要是集合都要去使用iterator输出

 

  • Collection接口:在一般开发中为了清楚的表现处理数据的存放往往不直接使用Collection接口
  •     子接口:List
  •     子接口:Set
  • List既然是一个接口,则必然要使用必须依靠子类------ArrayList

    使用方式:List  m=new ArrayList();

  •   ArrayList类:
  •     扩展AbstraList并执行List接口
  •     是动态数组,采用异步处理方式
Code
class Person
{
    
private String name ;
    
public Person(String name)
    {
        
this.name = name ;
    }
    
public String toString()
    {
        
return "姓名:"+this.name ;
    }
};
public class Demo01
{
    
public static void main(String args[])
    {
        
// 准备好了一个对象数组容器
        List all = new ArrayList() ;
        
// 向集合中加入数据
        all.add("AAAA") ;
        all.add(
"BBBB") ;
        all.add(
new Person("cccc")) ;

        
// 向第二个元素处加入新内容
        all.add(1,"www.mldn.cn") ;
        
// all.remove(1) ;(删除元素)
        for(int i=0;i<all.size();i++)
        {
            System.out.println(all.get(i)) ;
        }
    }
};
  • 输出时原则上已经不用上述的做法,记住只要是集合就用Itreator输出
Code
Iterator iter = all.iterator() ;//实例化方法
        
while(iter.hasNext())//判断是否还有数据
        {
            Object obj 
= iter.next() ;//对象都是object的子类向上转型输出即可
            System.out.println(obj) ;
        }
  • 注意在上面我们可以网ArrayList中加入了两种对象,分别是 String和person对象,JDK1.5后提供了方法只能加入一种
Code
List<java.lang.String> all = new ArrayList<java.lang.String>() ;
  •     HashSet类
  •       扩展了AbstractSet并实现Set接口
  •       使用散列表存储,无序列存储
  •         使用基本和 ArrayList一样只是不同的是没有序列,不论怎样往里面存输出时随机无序的。
  • Set<java.lang.String> all = new HashSet<java.lang.String>() ;
  •     ************************************************
  • Set与list的区别:List中允许有重复的元素,并保留下来。Set中不允许,被替换掉
  •     *****************************************************
  • HashSet是无序的,有序的用TreeSet,靠的是Comparable接口来排序
  •     TreeSet类:
  •       与HashSet不同的是,TreeSet升序排列数据
  • Set<java.lang.String> all = new TreeSet<java.lang.String>() ; 
  •     HashMap类:
  •       使用散列表实现Map接口
  •       映射类:key---value

Code
public static void main(String args[])
    {
        Map
<java.lang.String,java.lang.String> m = new HashMap<java.lang.String,java.lang.String>() ;
        m.put(
"张三","123456") ;
        m.put(
"李四","654321") ;
        m.put(
"王五","890762") ;
   //存数据都是用put,去用get
        
// 已经准备好了一个电话本,在内存中保留下来
        
// 要查找张三的电话
        System.out.println(m.get("赵六")) ;
    }

  • Map的主要功能是作为查询用,不是作为输出用
  • Map接口对戏那个不能直接使用Iterator输出,如果非要用Iterator输出,必须使用以下的步骤
  • Map---Set---Iterator---Map.Entry---key,values
Code
public static void main(String args[])
    {
        Map
<java.lang.String,java.lang.String> m = new HashMap<java.lang.String,java.lang.String>() ;
        m.put(
"张三","123456") ;
        m.put(
"李四","654321") ;
        m.put(
"王五","890762") ;

        Set all 
= m.entrySet() ;
        Iterator iter 
= all.iterator() ;
        
while(iter.hasNext())
        {
            Map.Entry me 
= (Map.Entry)iter.next() ;
            System.out.println(me.getKey()
+" --> "+me.getValue()) ;
        }
    }
  •     TreeMap类
  •       可以对数据进行排序,可以快速检索
  • Map<java.lang.String,java.lang.String> m = new TreeMap<java.lang.String,java.lang.String>() ;


简单介绍下JDK以前用到的类:

  • 枚举类Eumeration
  •   可以对一个对象的类集中的元素进行枚举  boolean hasMoreelements()  Object  nextElement()
  • 枚举类Eumeration与Iterator的功能一致,都是用于输出集合中的内容
  • 两者对比下:

1 boolean hasMoreelements()  Object  nextElement()

2      hasNext()          next()

  • 发现用Iterator明显简单,且List和Set都不能使用Enumeration输出,而List另一个子类:Vector可以使用Eumeration输出
  •     Vector类
  •         实现动态数组 是同步的
  • 用法与ArrayList几乎是一样的

Code
public static void main(String args[])
    {
        Vector v 
= new Vector() ;
        v.add(
"A") ;
        v.add(
"A") ;
        v.add(
"A") ;
        v.add(
"A") ;
        v.add(
"A") ;
        v.add(
"A") ;
        Enumeration e 
= v.elements() ;
        
while(e.hasMoreElements())
        {
            System.out.println(e.nextElement()) ;
        }
    }

  • Stack类:是vector的子类,后进先出标准的堆栈
Code
public static void main(String args[])
    {
        Stack s 
= new Stack() ;
        s.push(
"A") ;
        s.push(
"B") ;
        
// System.out.println(s.empty()) ;
        
// 取值
        while(!s.empty())
        {
            System.out.println(s.pop()) ;
        }
        
// 如果内容已经全部弹出则再弹会出现错误
        s.pop() ;
    }
  • HashTable和HashMap是相似的,但其是同步的,且不支持迭代函数
  • Properties类:是HashTable的子类,用来保持值的列表
  • 是属性类,与HashTable不同的是:

            HashTable是主要来保存对象的,而Properties主要用来保存String的

            setProperty(String key,String value)

总结:

  • ArrayList与Vector

    ArrayList              Vector

    异步                 同步

    只支持Iterator输出          支持Iterator和Enumeration输出

    出现较晚                出现较早

  • HashMap和HashTable

    HashMap              HashTable

    异步                  同步

    不直接支持Iterator输出        不直接支持Iterator输出

    出现较晚                出现较早


  • 清楚:以下几点:
  • 保存单个值的集合用Collectiion

      1 -List:允许有重复元素

          --ArrayList:异步处理,新出现的类,只能用Iterator输出

          --Vector:同步处理,旧的类,能用Iterator和Enumeration类输出

      2 -Set:不允许有重复的元素

          --HashSet:散列无序

          --TreeSet:有序,按Comparable排序

  • 保存一对值(Map)

      1 -HashMap:异步处理,新出的类

      2 -HashTable:同步处理,旧的类

      3 -TreeMap:按key进行排序

  • 输出:

      1 -Iterator:新的类方法名称较短

      2 -Enumeration:旧的类,方法名称较长

应用:一------多   多------多

Code
class Person
{
    
private String name ;
    
private int age ;
    
private List<Email> allEmails ;
    
    
public Person()
    {
        
this.allEmails = new ArrayList<Email>() ;
    }

    
public Person(String name,int age)
    {
        
this() ;
        
this.setName(name) ;
        
this.setAge(age) ;
    }
    
public List getAllEmails()
    {
        
return this.allEmails ;
    }
    
public void setAllEmails(List allEmails)
    {
        
this.allEmails = allEmails ;
    }
    
public void setName(String name)
    {
        
this.name = name ;
    }
    
public void setAge(int age)
    {
        
this.age = age ;
    }
    
public String getName()
    {
        
return this.name ;
    }
    
public int getAge()
    {
        
return this.age ;
    }
    
public String toString()
    {
        
return "姓名:"+this.getName()+",年龄:"+this.getAge() ;
    }
};
class Email
{
    
private String url ;
    
private String userName ;
    
private String flag ;

    
public Email(String url,String userName,String flag)
    {
        
this.setUrl(url) ;
        
this.setUserName(userName) ;
        
this.setFlag(flag) ;
    }

    
public void setUrl(String url)
    {
        
this.url = url ;
    }
    
public void setUserName(String userName)
    {
        
this.userName = userName ;
    }
    
public void setFlag(String flag)
    {
        
this.flag = flag ;
    }
    
public String getUrl()
    {
        
return this.url ;
    }
    
public String getUserName()
    {
        
return this.userName ;
    }
    
public String getFlag()
    {
        
return this.flag ;
    }
    
public String toString()
    {
        
return "网站地址:"+this.getUrl()+",EMAIL名称:"+this.getUserName()+this.getFlag() ;
    }
};

public class ColDemo01
{
    
public static void main(String args[])
    {
        Person p 
= new Person("LXH",28) ;
        Email e1 
= new Email("www.163.com","mldnqa","@163.com") ;
        Email e2 
= new Email("www.263.com","li_xing_hua","@263.net") ;
        Email e3 
= new Email("www.163.com","mldnkf","@163.com") ;

        p.getAllEmails().add(e1) ;
        p.getAllEmails().add(e2) ;
        p.getAllEmails().add(e3) ;

        
// 一个人拥有3个email地址
        
// 通过输出体现
        List<Email> all = p.getAllEmails() ;
        Iterator iter 
= all.iterator() ;
        System.out.println(p) ;
        
while(iter.hasNext())
        {
            Email e 
= (Email)iter.next() ;
            System.out.println(
"  |- "+e) ;
        }
    }
};
Code
class Student
{
    
private String name ;

    
private List allSubjects ;

    
public Student()
    {
        
this.allSubjects = new ArrayList() ;
    }
    
public Student(String name)
    {
        
this() ;
        
this.setName(name) ;
    }

    
public List getAllSubjects()
    {
        
return this.allSubjects ;
    }
    
    
public void setName(String name)
    {
        
this.name = name ;
    }
    
public String getName()
    {
        
return this.name ;
    }
    
public String toString()
    {
        
return "学生姓名:"+this.getName() ;
    }
};
class Subject
{
    
private String name ;
    
    
private List allStudents ;

    
public Subject()
    {
        
this.allStudents = new ArrayList() ;
    }
    
public Subject(String name)
    {
        
this() ;
        
this.setName(name) ;
    }

    
public List getAllStudents()
    {
        
return this.allStudents ;
    }

    
public void setName(String name)
    {
        
this.name = name ;
    }
    
public String getName()
    {
        
return this.name ;
    }
    
public String toString()
    {
        
return "课程名称:"+this.getName() ;
    }
};

public class ColDemo02
{
    
public static void main(String args[])
    {
        Student s1 
= new Student("张三") ;
        Student s2 
= new Student("李四") ;
        Student s3 
= new Student("王五") ;
        Student s4 
= new Student("赵六") ;
        Student s5 
= new Student("孙七") ;

        Subject su1 
= new Subject("C++") ;
        Subject su2 
= new Subject("JAVA") ;
        Subject su3 
= new Subject("软件工程") ;

        
// 多个学生选择同一门课程
        su1.getAllStudents().add(s1) ;
        su1.getAllStudents().add(s2) ;
        su1.getAllStudents().add(s3) ;

        su2.getAllStudents().add(s2) ;
        su2.getAllStudents().add(s4) ;

        su3.getAllStudents().add(s5) ;

        s1.getAllSubjects().add(su1) ;
        s2.getAllSubjects().add(su1) ;
        s2.getAllSubjects().add(su2) ;
        s3.getAllSubjects().add(su1) ;
        s4.getAllSubjects().add(su2) ;
        s5.getAllSubjects().add(su3) ;

        print(su1) ;
        print(su2) ;
        print(su3) ;

        System.out.println(
"------------------------") ;
        print(s1) ;
        print(s2) ;
        print(s3) ;
        print(s4) ;
        print(s5) ;
    }
    
public static void print(Subject s)
    {
        System.out.println(
"* 课程信息:"+s) ;
        Iterator iter 
= s.getAllStudents().iterator() ;
        
while(iter.hasNext())
        {
            System.out.println(
" |- "+iter.next()) ;
        }
    }
    
public static void print(Student s)
    {
        System.out.println(
"* 学生信息:"+s) ;
        Iterator iter 
= s.getAllSubjects().iterator() ;
        
while(iter.hasNext())
        {
            System.out.println(
" |- "+iter.next()) ;
        }
    }
};
Code
interface Book
{
    
// 书的价格、书的名字、书的信息
    public float getPrice() ;
    
public String getName() ;
    
public String getInfo() ;
}

class ChildBook implements Book
{
    
private String name ;
    
private float price ;
    
private String info ;

    
public ChildBook(String name,float price,String info)
    {
        
this.setName(name) ;
        
this.setPrice(price) ;
        
this.setInfo(info) ;
    }

    
public String getName()
    {
        
return this.name ;
    }
    
public float getPrice()
    {
        
return this.price ;
    }
    
public String getInfo()
    {
        
return this.info ;
    }
    
public void setName(String name)
    {
        
this.name = name ;
    }
    
public void setPrice(float price)
    {
        
this.price = price ;
    }
    
public void setInfo(String info)
    {
        
this.info = info ;
    }
    
public String toString()
    {
        
return "儿童书:书名:"+this.getName()+",价格:"+this.price+",简介:"+this.getInfo() ;
    }
};

class ComputerBook implements Book
{
    
private String name ;
    
private float price ;
    
private String info ;

    
public ComputerBook(String name,float price,String info)
    {
        
this.setName(name) ;
        
this.setPrice(price) ;
        
this.setInfo(info) ;
    }

    
public String getName()
    {
        
return this.name ;
    }
    
public float getPrice()
    {
        
return this.price ;
    }
    
public String getInfo()
    {
        
return this.info ;
    }
    
public void setName(String name)
    {
        
this.name = name ;
    }
    
public void setPrice(float price)
    {
        
this.price = price ;
    }
    
public void setInfo(String info)
    {
        
this.info = info ;
    }
    
public String toString()
    {
        
return "电脑书:书名:"+this.getName()+",价格:"+this.price+",简介:"+this.getInfo() ;
    }
};

class BookShop
{
    
private String name ;
    
// 一个书店包含多种书
    private List allBooks ;

    
public BookShop()
    {
        
this.allBooks = new ArrayList() ;
    }
    
public BookShop(String name)
    {
        
this() ;
        
this.setName(name) ;
    }

    
// 得到全部的书
    public List getAllBooks()
    {
        
return this.allBooks ;
    }

    
public void append(Book book)
    {
        
this.allBooks.add(book) ;
    }

    
public void delete(Book book)
    {
        
this.allBooks.remove(book) ;
    }

    
// 根据书的名字,去找到一本书
    public Book findByName(String name)
    {
        
// 从已有的数据中进行依次查询
        Book book = null ;
        Iterator iter 
= this.allBooks.iterator() ;
        
while(iter.hasNext())
        {
            
// 进行依次的比较
            Book temp = (Book)iter.next() ;
            
if(name.equals(temp.getName()))
            {
                
// 如果名字相等,则表示找到了
                book = temp ;
                
break ;
            }
        }
        
return book ;
    }

    
// 书的检索,书的模糊查询
    public List index(String keyWord)
    {
        List l 
= new ArrayList() ;

        Iterator iter 
= this.allBooks.iterator() ;
        
while(iter.hasNext())
        {
            Book b 
= (Book)iter.next() ;
            
//通过indexof可以查到与关键字的匹配
            if(b.getName().indexOf(keyWord)!=-1)
            {
                l.add(b) ;
            }
        }

        
return l ;
    }

    
public void setName(String name)
    {
        
this.name = name ;
    }
    
public String getName()
    {
        
return this.name ;
    }
};

public class ColDemo1
{
    
public static void main(String args[])
    {
        Book b1 
= new ChildBook("一千零一夜",10.0f,"一些传说故事") ;
        Book b2 
= new ChildBook("小鸡吃大灰狼",20.0f,"一件奇怪的事情") ;
        Book b3 
= new ChildBook("HALIBOTE",25.0f,"魔幻故事") ;
        Book b4 
= new ComputerBook("JAVA",65.0f,"JAVA 语言的核心技术") ;
        Book b5 
= new ComputerBook("C++",50.0f,"C++ 语言的核心技术") ;
        Book b6 
= new ComputerBook("Linux",50.0f,"服务器搭建") ;

        BookShop bs 
= new BookShop("MLDN 网上书店") ;
        bs.append(b1) ;
        bs.append(b2) ;
        bs.append(b3) ;
        bs.append(b4) ;
        bs.append(b5) ;
        bs.append(b6) ;

        
// print(bs.getAllBooks()) ;
        
// print(bs.index("A")) ;
        
// 假设将C++这本书从书店删除掉
        Book b = bs.findByName("C++") ;
        
// System.out.println(b) ;
        bs.delete(b) ;
        print(bs.getAllBooks()) ;
    }
    
public static void print(List all)
    {
        Iterator iter 
= all.iterator() ;
        
while(iter.hasNext())
        {
            Book b 
= (Book)iter.next() ;
            System.out.println(b) ;
        }
    }
};

posted @ 2009-03-15 20:58  xiaomiao  阅读(272)  评论(0编辑  收藏  举报