论坛首页 入门技术论坛

常用集合示例

浏览 3295 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-07-10  

/*
 一些常用的集合类的方法的用法演示。
        JAVA容器的两种基本类型:
        区别在于每个位置保存的元素个数
        Collection:一组独立的元素通常都 要服从某种规则。List按对象进入的顺序保存对象,不做排序和编辑;而set则是不能有重复                   的元素,即每个对象只接受一次,并有自己的内部的排序算法。
        Map:一组成对的“键值对”对象,get()时一般返回Entry -->是一种专门针对Hash容器的数据类型,用来保存键值对。
*/

import java.util.*;
public class JAVAContainer {


/*介绍集合之前先看一看迭代器:
  简化对集合的操作,主要功能是遍历并选择集合中的对象,其中有三个最要的方法:
      1.hasNext() 返回布尔值 看集合中还有没有元素
                                         2.next() 返回下一个元素 返回的是O的所一定要强转一下
      3.remove() 元素删除
  接口 Iterator:
       构建一个Iterator迭代器 -->Iterator iterator=所要进行迭代的集合对象.iterator();

  接口 Enumeration<E>:  注意=====Enumeration已经不是主流,Iterator是它的下一代替代品
       构建一个Enumeration迭代器-->Enumeration enumeration=所要进行迭代的集合对象.elements()
*/

 

 


public static void main(String[] args) throws Exception{

 

 

//   ArrayList:  允许包括 null 在内的所有元素,此类是线程不同步的

{
   ArrayList arraylist=new ArrayList();
   arraylist.add(0,"end");  //指定索引加入值,需注意的是,如果现有2个值,我加入索引为5的那么就会出现异常,即不能越位
   for(int i=0;i<2;i++){
     arraylist.add(i,String.valueOf(i));  //将指定元素加入指定位置
   }
   System.out.println("ArrayList:");
   for(int i=0;i<arraylist.size();i++){
      System.out.print(arraylist.get(i)+";");  //get(int i)取出指定位置的元素
    }
    arraylist.add("0");//直接加入值到ArrayList的最后
    arraylist.add("0");
 
    // arraylist.lastIndexOf("0") 返回指定的对象在列表中最后一次出现的位置索引
    System.out.print("\nArrayList\'s lastIndexOf(\"0\") is "+arraylist.lastIndexOf("0"));
}

 

 

//  Collections: 此类完全由在 collection 上进行操作或返回 collection 的静态方法组成

{
  String []array=new String[]{"a","b","c"};

  List list=Arrays.asList(array);  // aslist(Object []) 通过一个已有数组,构造一个List对象

  Collections.fill(list,"Fill");   //用Fill填充全部元素 使用指定元素替换指定列表中的所有元素。

  System.out.println("\nCollections:");
  for(int i=0;i<list.size();i++){
    System.out.print(list.get(i)+";");
  }

  array=new String[]{"1","2","3"};
  List list2=Arrays.asList(array);
  Collections.copy(list,list2);  //拷贝list2的数据进list

  System.out.println("\n"+list);

  Collections.swap(list,2,1); //调换索引为1和2的元素的位置  在指定列表的指定位置处交换元素

  System.out.println(list);
}

 

 

//  HashMap 一个速度最快的容器,此类不保证映射的顺序,特别是它不保证该顺序恒久不变,不是线程同步

{
  HashMap hashmap=new HashMap();
  hashmap.put("0","c");  //存放对象用put方法 记住所存的一定是键值对
  hashmap.put("1","a");
  hashmap.put("2","b");
  hashmap.put("3","a");
  System.out.println("HashMap:");

  System.out.println(hashmap);  //该容器有其内部的排序方式 事实上是依据哈希算法来排的
 
  Set set=hashmap.keySet();  //获取全部键 它的返回类型是set
  Iterator iterator=set.iterator();
  while(iterator.hasNext()){
    System.out.print(hashmap.get(iterator.next())+";");
  }
}

 

 

//  HashSet  不保证集合的迭代顺序

{
  HashSet hashset=new HashSet(); 
  //一个绝对不能重复的类型 如果有遇到存重复的值不会报异常,只是add()会返一个boolean型的  false,当然肯定是不会把该元素加入集合  中的,它同样有size(),isEmpty(),remove()等方法。
  hashset.add("c");
  hashset.add("b");
  hashset.add("a");
  hashset.add("a");
  hashset.add("b");
  System.out.println("\nHashSet:");
  System.out.println(hashset);
  Iterator iterator=hashset.iterator();//取出元素
  while(iterator.hasNext()){
    System.out.print(iterator.next()+";");
  }
}

 


//Hashtable 任何非 null 对象都可以用作键或值,现在用得不多啦,一个完全可以由其他容器替换的老容器类型
{
  Hashtable hashtable=new Hashtable();
  hashtable.put("0","c");
  hashtable.put("1","a");
  hashtable.put("3","c");
  hashtable.put("2","b");
  System.out.println("\nHashtable:");
  //注意与之对应的迭代器是Enumeration,而不是Iterator
  Enumeration enumeration=hashtable.elements();//获取元素,Enumeration已经不是主流,Iterator是它的下一代替代品
  while(enumeration.hasMoreElements()){
    System.out.print(enumeration.nextElement()+";");
  }
}

 


//TreeMap 
{
  TreeMap treemap=new TreeMap();
  treemap.put("0","d"); //指定键值,如果映射以前包含一个此键的映射关系,那么将替换原值
  treemap.put("2","a");
  treemap.put("1","b");
  treemap.put("3","c");
  System.out.println("\nTreeMap:");//可以对键排序
  System.out.println(treemap);
  System.out.println(treemap.firstKey());//返回第一个键
  Set set=treemap.keySet();
  Iterator iterator=set.iterator();
  while(iterator.hasNext()){
  System.out.print(treemap.get(iterator.next())+";");
 }
}

//TreeSet
{
  TreeSet treeset=new TreeSet();//自动排序内容
  treeset.add("b");
  treeset.add("a");
  treeset.add("c");
  treeset.add("d");
  System.out.println("\nTreeSet:");
  System.out.println(treeset);
  System.out.println(treeset.first());//返回第一个元素
  Iterator iterator=treeset.iterator();
  while(iterator.hasNext()){
   System.out.print(iterator.next()+";");
  }
}

//Vector  一个最早的容器类,实现方式最老,同是它是线程同步的的,所以效率最慢,先进先出
 {

  Synchronized public Vector getItems(){  //线程同步的方法
 return ....;
  }

  Vector vector=new Vector();
  vector.add(0,"b");  //在指定位置加入指定元素
  vector.add("a");    //加到最后
  vector.addElement("d"); //加到最后,将其集合的大小加1
  vector.add("c");
  System.out.println("\nVector:");
  System.out.println(vector);
  vector.set(2,"h");//替换掉指定索引的元素
  System.out.println(vector);
  Object []str=vector.toArray();  //将集合中的元素拷到一个数组中,注间因为集合中存的是对象,所以数组必须是Object类型
  for(int i=0;i<str.length;i++){
    System.out.print(str[i]+";");
  }
  vector.setSize(2);//重新设置大小为2
  System.out.println("\n"+vector);
}
 }
}

如果添加元素的顺序对你很重要,采用LinkedHashSet和LinkedHashMap,具体用法看帮助...
 
另外还有SortedMap和SortedSet可以实现一定规则的排序,具体使用请参照JAVA_API,哈哈哈....

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics