(一)
关于迭代器:
迭代器有两个:Enumeration已经不是主流,Iterator是它的下一代替代品.
(二)
关于容器:
Collection FrameWork如下:
Collection (最基本的集合接口)
├List (可以包含重复元素)
│├LinkedList
│├ArrayList (线程不安全的,就是不同步的;数据增长:默认增长为原来一半)
│└Vector (线程安全的,也就是说是同步的;数据增长:默认增长为原来一倍)
│ └Stack
└Set (不包含重复元素)
Map (Map是键-值的映射关系)
├Hashtable (基于陈旧的Dictionary类;线程安全,即同步;null不可作为它的key或value)
├HashMap (Map接口的一个实现;线程不安全,即不同步;null可作为它的key或value)
└WeakHashMap
hashtable,hashmap,arraylist,vector,iterator的实例及总结:
(2.1)
总结一:
vector,arraylist,hashtable,hashmap:
1.
都可采用iterator(hasNext()--next())来作为迭代器,
也可采用for--size()--get()的方法来进行历遍.
都可用toString()方法来显示整个容器的内容.
都可用:if( xx!=null&&!xx.isEmpty() )来进行判断.
2.
vector,arraylist:插入东西都用add(),都可用addAll()加载其它容器的内容.
hashtable,hashmap:插入东西都用put(),get(),remove(),clear(),isEmpty(),containsKey().
总结二:
hashtable,hashMap:用iterator迭代器时,是用其key来作为历遍的,即: xx.keySet
().iterator+xx.get(it.get(i)).而不像vector,arraylist,直接xx.iterator().
总结三:
hashtable自己本身的迭代器是Emuneration(用方法xx.keys(),xx.elements()),而不是iterator.
总结四:
将hashtable,hashmap的key放于vector,arraylist.如下:
Vector ve=new Vector(hashtable1.keySet());
ArrayList al=new ArrayList(hashtable1.keySet());
总结五:
hashtable,hashmap的数据,后进先出;
vector,arraylist的数据,先进先出;
总结六:
HashSet的方法与arraylist的方法,相同.但hashset不允许内容有重复.若有重复不会报错,而会返回
一个fasle值.且在进行历遍时,就可看到效果了.
(2.2)
实例:
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.HashMap;
import java.util.Vector;
import java.util.ArrayList;
import java.util.Iterator;
public class JavaContainerDemo {
public static void main(String[] args)
{
Hashtable ht=new Hashtable();
ht.put(0,"jason");
ht.put(1,"test");
ht.put(2,"access");
if(ht.contains("jason")&&ht.containsKey(1)&&!ht.isEmpty())
{
ht.remove(2);
}
System.out.println("hashtable,是先入后出");
System.out.println("hashtable.keySet():"+ht.keySet());
System.out.println("hashtable.toString():"+ht.toString());
System.out.println("*****历遍方式一:Enumeration*******");
Enumeration hte= ht.keys();
//从hashtable,hashmap获取出来的key,value的数据类型都是:Object
Object key;
while(hte.hasMoreElements())
{
//System.out.println("hashtable's key:"+hte.nextElement());
//System.out.println("hashtable's value:"+ht.get(hte.nextElement()));
//不能用这样的方式进行历遍,在一个while中,使用两次nextElement(),指针会跳两次的.应该是:
key=hte.nextElement();
System.out.println("hashtable's key:"+key);
System.out.println("hashtable's value:"+ht.get(key));
}
System.out.println("*****历遍方式二:iterator*******");
System.out.println("*****hashtable是键值对存在的,所以只能用keySet().iterator*******");
Iterator hti=ht.keySet().iterator();
Object key2;
while(hti.hasNext())
{
key2=hti.next();
System.out.println("hashtable's key:"+key2);
System.out.println("hashtable's value:"+ht.get(key2));
}
System.out.println("*****历遍方式三:for*******");
for(int i=0;i<ht.size();i++)
{
System.out.println("hashtable's key:"+i);
System.out.println("hashtable's value:"+ht.get(i));
}
//ht.clear();
HashMap hm=new HashMap();
//hm.put(null, null); hashmap允许key-value都为null
hm.put(0, "hwj");
hm.put(1, null);
hm.put(2, "access");
if(hm.containsKey(0)&&hm.containsValue("access")&&!hm.isEmpty())
{
hm.remove(1);
}
System.out.println("hashmap,也是先进后出");
System.out.println("hashmap.keySet():"+hm.keySet());
System.out.println("hashmap.toString():"+hm.toString());
System.out.println("*****hashmap历遍方式一:iterator*******");
Iterator hmi=hm.keySet().iterator();
Object key3;
while(hmi.hasNext())
{
key3=hmi.next();
System.out.println("hashmap's key:"+key3);
System.out.println("hashmap's value:"+hm.get(key3));
}
System.out.println("*****hashmap历遍方式二:for*******");
for(int j=0;j<hm.size();j++)
{
System.out.println("hashmap's key:"+j);
System.out.println("hashmap's value:"+hm.get(j));
}
//hm.clear();
Vector v=new Vector(ht.keySet());
System.out.println("vector原来的大小:"+v.size());
v.add("中国人");
v.addElement("香港人");
System.out.println("利用vector.addAll(container)去加载其它容器中的内容");
v.addAll(hm.keySet());
//v.setElementAt("数据2", 2);
if(v!=null&&!v.isEmpty())
{
System.out.println("vector现在的大小:"+v.size());
}
System.out.println("*****vector:是先入先出*******");
System.out.println("vector.toString():"+v.toString());
System.out.println("*****vector历遍方式一:iterator*******");
Iterator vi=v.iterator();
while(vi.hasNext())
{
System.out.println("vector's value:"+vi.next());
}
System.out.println("*****vector历遍方式二:for*******");
for(int m=0;m<v.size();m++)
{
//System.out.println("vector's value:"+v.get(m));
//v.get(m)=v.elementAt(m),arraylist没此方法
System.out.println("vector's value:"+v.elementAt(m));
}
ArrayList al=new ArrayList(hm.keySet());
System.out.println("arraylist原来的大小:"+al.size());
al.add("杰森");
System.out.println("利用arraylist.addAll(container)去加载其它容器中的内容");
al.addAll(v);
if(al!=null&&!al.isEmpty())
{
System.out.println("arraylist现在的大小:"+al.size());
}
System.out.println("*****arraylist:是先入先出*******");
System.out.println("*****arraylist.toString()"+al.toString());
System.out.println("*****arraylist历遍方式一:iterator*******");
Iterator ali=al.iterator();
while(ali.hasNext())
{
System.out.println("al's value:"+ali.next());
}
System.out.println("*****arraylist历遍方式二:for*******");
for(int n=0;n<al.size();n++)
{
System.out.println("al's value:"+al.get(n));
}
//HashSet的方法与arraylist的方法,相同.但hashset不允许内容有重复.若有重复不会报错,而会返
回一个fasle值.
//且在进行历遍时,就可看到效果了.
HashSet hs=new HashSet();
hs.add("1");
hs.add("1");
Iterator hsi=hs.iterator();
while(hsi.hasNext())
{
System.out.println("hashset's value:"+hsi.next());
}
}
}