现在的位置: 首页 > 综合 > 正文

10—java类集

2013年10月11日 ⁄ 综合 ⁄ 共 5205字 ⁄ 字号 评论关闭

 

1、类集是一个动态的对象数组;
 回顾:对象数组:
  可以保存多个对象在一个数组之中;
  最大问题:数组的长度不可以改变,创建数组是需考虑创数组的容量;
 
 类集大小不确定,可以任意的扩充或减少;
 类集都在java.util这个包中;
 java类集接口框架:
  Collection 元素的类集
  List  元素的序列(Collection的子接口)
  Set  没有重复元素的类集(Collection的子接口)
  SortedSet 没有重复元素且排序的类集
  Map  元素为二元偶对的汇集,不能重复
  SortedMap 在Map基础上,加上排序的要求
  Iterator 一个可遍历总个类集的对象
  ListIterator 可遍历一个序列List的对象
 以上所列出的全部都是接口;对于以上的接口主要的有三个
  Collection: Collection 下存放的就是一个个的对象,每次存放单个对象
  Map:  每次存放一对值:key--》value
  Iterator: 输出接口,只要是集合都要去使用iterator输出
 Collection接口:在一般的开发中为了清楚的表现处理数据的存放往往不直接使用;
  子接口:List
  子接口:Set

 List既然是一个接口,则要使用必须依靠子类--》ArrayList
  如果使用List,则格式为:List list=new ArrayList();
  向对象数组中加入数据:
   list.add(E e)---E 指的是元素
  从对象数组中删除数:
   list.remove(int index)
  数据存放的数据就是加入时的顺序;
  import java.util.*;
  class Person{
   private String name;
   public Person(String name){
    this.name=name;
    }
   }
  public class Demo{
   public static void main(String args[]) throws Exception{
    //准备一个对象数组容器
    List all=new ArrayList();
    //向集合中加入数据
    all.add("LID");
    all.add("NAME");
    all.add(new Person("YUJ"));
    
    //向第二个元素处加入新内容
    all.add(1,"LY");
    System.out.println(all);
    }
   }
 
 打印出对象数组中的值:
  同for循环:
   通过all.size()得到数组的长度;
   通过all.get(int index)得到值;
  使用Iterator输出:
   以为集合的长度不固定,所以iterator采用的方法是一个一个判断输出;
   如果有下一个元素,则执行,如果没有下一个元素就不执行了;
   判断是否有下一个元素:public boolean hasNext();
   输出元素:public Object next()
    import java.util.*;
    class Person{
     private String name;
     public Person(String name){
      this.name=name;
      }
     public String toString(){
      return "姓名:"+this.name;
      }
     }
    public class Demo{
     public static void main(String args[]) throws Exception{
      //准备一个对象数组容器
      List all=new ArrayList();
      //向集合中加入数据
      all.add(3);
      all.add("LID");
      all.add("NAME");
      all.add(new Person("YUJ"));
      //特定的遍历对象
      Iterator ite=all.iterator();
      while(ite.hasNext()){
       System.out.println(ite.next());
       }
      }
     }

2、如何只能让一个集合中只加入一种对象:JDK1.5后添加的;
 List<String> all=new ArrayList<String>();这样就只能addString类型的数据;

3、(Collection)集合操作的主要方法:
 向集合中加入数据:public boolean add(Object obj)
 从集合中删除数据:public boolean remove(Object obj),public boolean remove(int index)
 为Iterator实例化:public Iterator iterator()
 取出元素的个数:public int size();

4、set接口:
 Set和List的区别:
  (1).Set的基本使用与List一致,但是HashSet子类存放时是无序的(散列存放的);
  (2).Set中的数据不允许重复元素,重复元素被替换掉;List中允许有重复元素;
  注意:HashSet存放时是无序的,但是TreeSet存放时是有序的,按照字母顺序,
   而不是添加数据时的顺序;
   TreeSet靠的是Comparable接口排序的;
  HashSet得排序和TreeSet的不一样 注意:

5、Iterator:可以获取元素,是从前到后的;ListIterator:允许双向遍历;

6、HashMap:
 电话本:
  张三---》123
  李四---》456
 HashMap是Map的子接口:map的主要功能是作为查找使用,而不是作为输出使用;
 存数据的方法:
  put(Object key,Object value);
 取内容:根据key取
  Object get(Object key);
 Map 接口的对象 不能直接使用Iterator输出;
  如果非要使用Iterator输出Map接口对象中的内容,必须使用一下的步骤:
  Map-->Set-->Iterator-->Map.Entry-->key、values
  //TreeMap 和map用Iterator输出(TreeMap存放是排序的,按照key值)
  import java.util.*;
  public class Demo{
   public static void main(String args[]) throws Exception{
    Map<String,String> m=new TreeMap<String,String>();
    m.put("aa","123");
    m.put("ff","456");
    m.put("cc","789");
    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());
     }
    }
   }
 以上是java2带来的新特性;
 Enumeration:枚举,与Iterator的功能一致,都是用于输出集合中的内容;
     Enumeration  Iterator
 判断是否有下一个内容  hasMoreElement() hasNext()
 取值    nextElement  next()
 List和set都不能使用Enumeration输出,
 而List的另外一个子类:Vector可以使用Enumeration输出;
  import java.util.*;
  public class Demo{
   public static void main(String args[]) throws Exception{
    Vector v=new Vector();
    v.add("A");
    v.add("B");
    v.add("D");
    v.add("E");
    v.add("F");
    Enumeration e=v.elements();
    while(e.hasMoreElements()){
     System.out.println(e.nextElement());
     }
    }
   }

 栈是一个先进后出的:
  import java.util.*;
  public class Demo{
   public static void main(String args[]) throws Exception{
    Stack s=new Stack();
    s.push("A");
    s.push("B");
    s.push("C");
    
    //取值
    while(!s.empty()){
     System.out.println(s.pop());
     }
    }
   }

 Hashtable与HashMap相似,但是Hashtable是同步的;
 采用映射的方式:
  key-----》value
 Hashtable不支持迭代函数;
  import java.util.*;
    public class Demo{
     public static void main(String args[]) throws Exception{
      Map<String,String> m=new Hashtable<String,String>();
      m.put("aa","123");
      m.put("ff","456");
      m.put("cc","789");
      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());
       }
    

Properties 类是Hashtable的子类;
 属性类:
  与Hashtable不同的是,Properties主要是保存字符串的
  Hashtable是保存对象的;
  getProperty(String key,String value)
  getProperty(String key)
   import java.util.*;
     public class Demo{
      public static void main(String args[]) throws Exception{
       Properties p=new Properties();
       p.setProperty("中国的首都","北京");
       p.setProperty("日本的首都","东京");
       p.setProperty("美国的首都","华盛顿");
       //如果key值对没有对应的value,我们可以给个默认值
       System.out.println(p.getProperty("日本的首都","不存在"));
       }
      }

 

分清一下几点:
 保存单个值得集合:Collection
  List:允许有重复元素
   ArrayList:异步处理,新的类,只能用Iterator输出
   Vector:同步处理,就得类,能用Iterator和Enumeration同时输出
  Set:不允许有重复的元素,
   HashSet:散列,无序
   TreeSet:有序,按Comparable排序
 保存一对值(Map)
  HashMap:异步处理,新的类
  Hashtable:同步处理,旧的类
  TreeMap:按KEY进行排序的集合
 输出:
  Iterator:新的输出,方法名称较短
  Enumeration:旧的输出类,方法名称较长

抱歉!评论已关闭.