/*
一些常用的集合类的方法的用法演示。
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,哈哈哈....