你的位置:首页 > Java教程

[Java教程]集合框架笔记


集合类:(容器)
 集合数组的区别和特点:
  1.数组和集合:都是存储容器
  2.集合(可变长度)是存储对象的,只能存数对象,可以存储不同类型的对象.
  3.数组(固定长度)一般存储数据,同一种类型的数据.
  
 集合的种类:
  1.List(元素都带有角标)
  
   ListIterator是List特有的迭代器,是Iterator的子接口.
   在迭代时,不可以通过集合中的方法来操作集合中的元素,会发生并发异常.
   所以在迭代时,只能用迭代的方法.而Iterator的方法有限,只能进行删除,判断取出的操作,
   想对元素进行添加,修改的时候,就需要其子接口ListIterator的方法来获取.

迭代器代码演示:

/*取出元素:迭代器:Iterator*/import java.util.*;class IteratorDemo{  public static void main(String [] args)  {    getElement();  }    public static void getElement()  {    ArrayList al1 = new ArrayList();        al1.add("java01");    al1.add("java02");    al1.add("java03");    al1.add("java04");        Iterator it = al1.iterator();    while(it.hasNext())    {      sop(it.next());    }  }  public static void sop(Object obj)  {    System.out.println(obj);  }    }

   
   常见的3个子类:(常见面试问题)
   ArrayList: 底层的数据结构使用的是 数组结构;  特点:查询速度快,但是增删较慢. (线程不同步)
   LinkedList: 底层使用的是 链表结构; 特点:增删速度快,查询慢.
   Vector: 底层是数组数据结构.与ArrayList功能一样.(vector线程是同步的),被ArrayList替代了.
   
   List集合判断元素是否相同.依据的元素的equals方法.(其他集合跟List不同),contains底层调用的是equals方法.

相关代码及练习:

Vector:

import java.util.*;/*枚举与迭代其实是一样的.*/class VectorDemo{  public static void main(String [] args)  {    Vector v = new Vector();        v.add("java01");    v.add("java02");    v.add("java03");    v.add("java04");        Enumeration en = v.elements();    while(en.hasMoreElements())    {      System.out.println(en.nextElement());    }  }}

  ArrayList:

/*去除ArrayList中的重复元素.*/import java.util.*;class ArrayListTest{  public static void main(String [] args)  {    ArrayList al = new ArrayList();        al.add("java01");    al.add("java01");    al.add("java01");    al.add("java02");    al.add("java01");    al.add("java03");        sop("原集合 : "+al);        /*    //遍历原集合    Iterator it = al.iterator();        while(it.hasNext())    {      sop(it.next());    }    */        //调用方法去除重复元素.    al = singleElement(al);        sop(al);      }    public static ArrayList singleElement(ArrayList al)  {    ArrayList newAl = new ArrayList();        Iterator it = al.iterator();        while(it.hasNext())    {      Object obj = it.next();      if(!newAl.contains(obj))      {        newAl.add(obj);      }    }        return newAl;      }      public static void sop(Object obj)  {    System.out.println(obj);  }    }

/*将自定义对象存储到ArrayList中,并去除相同元素.例如:存人对象,同姓名,同年龄视为同一个人.思路:1.定义人对象2.定义集合容器3.对比*/import java.util.*;class Person{  private String name;  private int age;    Person(String name,int age)  {    this.name = name;    this.age = age;  }  public boolean equals(Object obj)  {    if(!(obj instanceof Person))      return false;        Person p = (Person)obj;        System.out.println(this.name+"-----"+p.name);        return this.name.equals(p.name) && this.age == p.age;      }    public void setName()  {    this.name = name;  }    public void setAge()  {    this.age = age;  }    public String getName()  {    return name;  }    public int getAge()  {    return age;  }   }class ArrayListTest2{  public static void main(String [] args)  {    ArrayList al = new ArrayList();        al.add(new Person("lisi01",30)); //al.add(Object obj) Object obj = new Person("lisi01",30); 向上转型.     al.add(new Person("lisi02",31));  //  al.add(new Person("lisi02",31));    al.add(new Person("lisi03",32));    al.add(new Person("lisi04",33));  //  al.add(new Person("lisi04",33));          //  al = singleElement(al);        sop("remove 03 :"+al.remove(new Person("lisi03",32))); //remove底层也是调用的equals方法.        Iterator it = al.iterator();        while(it.hasNext())    {      /*      Object obj = it.next();      Person p =(Person)obj;      */      Person p = (Person)it.next();      sop(p.getName()+"-----"+p.getAge());    }      }    public static ArrayList singleElement(ArrayList al)  {    ArrayList newAl = new ArrayList();        Iterator it = al.iterator();    while(it.hasNext())    {      Object obj = it.next();      if(!newAl.contains(obj))      {        newAl.add(obj);      }    }    return newAl;      }        public static void sop(Object obj)  {    System.out.println(obj);  }  }

LinkedList:

/*LinkedList如果集合中没有元素,会出现NoSuchElememtException异常在JDK1.6中提供了新的方法来替代offerFirst();offerLast();peekFirst();peekLast();pollFirst();pollLast();*/import java.util.*;class LinkedListTest{  public static void main(String [] args)  {    LinkedList link = new LinkedList();    /*    link.addFirst("java01");    link.addFirst("java02");    link.addFirst("java03");    link.addFirst("java04");        */    link.addLast("java01");    link.addLast("java02");    link.addLast("java03");    link.addLast("java04");          sop(link);        while(!link.isEmpty())    {      sop(link.removeFirst());    }          }    public static void sop(Object obj)  {    System.out.println(obj);  }  }

 


  2.Set
  3.Map


  
 特性:
 
 集合框架:
  顶层: Colletion(接口)
基本方法演示:

/*集合框架1.add方法的参数类型是Object.以便于接收任何类型2.集合中存储的都是对象的引用(地址值).*/import java.util.*;class CollectionDemo{  public static void main(String [] args)  {    method_2();      }    public static void method_2()  {      ArrayList al1 = new ArrayList();        al1.add("java01");    al1.add("java02");    al1.add("java03");    al1.add("java04");          ArrayList al2 = new ArrayList();        al2.add("java01");    al2.add("java02");    al2.add("java05");    al2.add("java06");        al1.retainAll(al2); //al1中存放的是与al2中的交集的部分. 没有交集的话al1是空集 显示的结果为[].        //al1.removeAll(al2); //将al1与al2中相同的删除.在al1中显示的去除与al2相同的元素.        sop("al1 : "+al1);    sop("al2 : "+al2);              }  public static void base_method()  {    //创建一个集合容器,使用Collection接口的子类,ArrayList创建.    ArrayList al = new ArrayList();        //给容器添加元素    al.add("java01");    al.add("java02");    al.add("java03");    al.add("java04");        //打印原集合    sop("原集合 : "+al);        //获取集合长度,个数 用size(); 而非length();    sop("size : "+al.size());        //清空集合 clear()    //al.clear();        //删除元素 remove();    al.remove("java02");        //判断元素    sop("java01是否存在:"+al.contains("java01"));        sop("集合是否为空 : "+al.isEmpty());        sop(al);              }      public static void sop(Object obj)  {    System.out.println(obj);  }  }


   常见子接口: List Set
   
 Q:为什么出现这么多容器:
  A:每个容器对数据的存储方式都不同,这个存储方式可以称为:数据结构.
  
 
 迭代器:Iterator.(取出元素并操作元素)
 返回值类型是一个接口.
 next();方法
 hasNext();
 remove();
 
  Collection
   1.List 元素是有序的,可以重复,该集合体系有索引
   
   2.Set 元素是无序的,元素不可以重复,没有索引.
   
   List集合特有方法:
    1.指定位置插入元素