1、描述:類集僅僅是提供了處理事情的一個(gè)更好的方法。盡管類集的增加改變了許多原始工具的結(jié)構(gòu),但卻不會(huì)導(dǎo)致被拋棄。
2、集合框架圖:

3、 ArrayList:能夠自動(dòng)增長(zhǎng)容易的數(shù)組,其底層以對(duì)象數(shù)組的方式實(shí)現(xiàn)。
code:
import java.util.*;
public class Test
{
public static void printElements(Collection c)
{
Iterator it=c.iterator();
//remove方法是一個(gè)可選擇的方法,移去上次返回的對(duì)象
//大部分集合框架類,都實(shí)現(xiàn)了接口的這個(gè)方法
//it.next();
//it.remove();
while(it.hasNext())
{
System.out.println(it.next());
}
}
public static void main(String args[])
{
ArrayList al=new ArrayList();
//al.add("太陽(yáng)");
//al.add("星星");
//al.add("月亮");
//添加對(duì)象元素
al.add(new Student("張三",21));
al.add(new Student("李四",22));
al.add(new Student("王五",25));
//get()方法獲取元素
for(int i=0;i<al.size();i++)
{
System.out.println(al.get(i));
}
//直接打印
System.out.println(al);
//ArrayList的toArray()方法獲得的數(shù)組
Object[] objs=al.toArray();
for(int i=0;i<objs.length;i++)
{
System.out.println(objs[i]);
}
//Arrays.asList()返回一個(gè)固定列表
List l=Arrays.asList(objs);
System.out.println(l);
//Iterator:通用的訪問(wèn)數(shù)據(jù)的方法
printElements(al);
}
}
class Student
{
private String name;
private int age;
Student(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString()
{
return "name"+name+"age:"+age;
}
}
4、Collections類:
import java.util.*;
public class Test
{
public static void printElements(Collection c)
{
Iterator it=c.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
public static void main(String args[])
{
ArrayList al=new ArrayList();
al.add(new Student(2,"zhangsan"));
al.add(new Student(1,"lisi"));
al.add(new Student(3,"wangwu"));
al.add(new Student(3,"laoqi"));
//調(diào)用Collections的方法進(jìn)行排序,被排序?qū)ο笠獙?shí)現(xiàn)Comparable接口compareTo方法
//Collections.sort(al);
//指定比較器——實(shí)現(xiàn)Comparator接口的compare()方法
Collections.sort(al,new Student.StudentComparator());
//反序排列
//Collections.sort(al,Collections.reverseOrder());
printElements(al);
}
}
class Student implements Comparable
{
int num;
String name;
static class StudentComparator implements Comparator
{
public int compare(Object o1,Object o2)
{
Student s1=(Student)o1;
Student s2=(Student)o2;
int result=s1.num>s2.num?1:(s1.num==s2.num?0:-1);
if(result==0)
{
result=s1.name.compareTo(s2.name);
}
return result;
}
}
Student(int num,String name)
{
this.num=num;
this.name=name;
}
public int compareTo(Object o)
{
Student s=(Student)o;
return num>s.num?1:(num==s.num?0:-1);
}
public String toString()
{
return "num:"+num+"\tname:"+name;
}
}
4、LinkedList:采用雙向鏈表實(shí)現(xiàn)的,可實(shí)現(xiàn)棧、隊(duì)列、雙向隊(duì)列
import java.util.*;
public class Test
{
public static void main(String[] args)
{
MyStack ms=new MyStack();
ms.push("one");
ms.push("two");
ms.push("three");
while(!ms.empty())
{
System.out.println(ms.pop());
}
MyQueue mq=new MyQueue();
mq.put("one");
mq.put("two");
mq.put("three");
while(!mq.empty())
{
System.out.println(mq.get());
}
}
}
class MyStack
{
private LinkedList ll=new LinkedList();
public void push(Object o)
{
ll.addFirst(o);
}
public Object pop()
{
return ll.removeFirst();
}
public Object peek()
{
return ll.getFirst();
}
public boolean empty()
{
return ll.isEmpty();
}
}
class MyQueue
{
private LinkedList ll=new LinkedList();
public void put(Object o)
{
ll.addLast(o);
}
public Object get()
{
return ll.removeFirst();
}
public boolean empty()
{
return ll.isEmpty();
}
}
注:ArrayList底層采用數(shù)組完成,Linkedlist以一般的雙向鏈表完成,除了數(shù)據(jù)本身,還有兩個(gè)引用。如果要經(jīng)常在列表的開始處增加元素,或在列表中大量地增刪操作,應(yīng)采用LinkedList,否則使用ArrayList更快。
5、HashSet類
import java.util.*;
public class Test
{
public static void printElements(Collection c)
{
Iterator it=c.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
public static void main(String args[])
{
HashSet hs=new HashSet();
hs.add(new Student(1,"zhangsan"));
hs.add(new Student(2,"lisi"));
hs.add(new Student(3,"wangwu"));
hs.add(new Student(1,"zhangsan"));
printElements(hs);
}
}
class Student
{
int num;
String name;
Student(int num,String name)
{
this.num=num;
this.name=name;
}
public String toString()
{
return num+":"+name;
}
//Object類里的hashCode()哈希的鍵是地址
//要為存放到散列表的各個(gè)對(duì)象同時(shí)定義hasCode()和equals()
public int hashCode()
{
return num*name.hashCode();
}
public boolean equals(Object o)
{
Student s=(Student)o;
return num==s.num&&name.equals(s.name);
}
}
6、TreeSet類
import java.util.*;
public class Test
{
public static void printElements(Collection c)
{
Iterator it=c.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
public static void main(String args[])
{
//指定比較器
TreeSet ts=new TreeSet(new Student.StudentComparator());
ts.add(new Student(1,"zhangsan"));
ts.add(new Student(2,"lisi"));
ts.add(new Student(3,"wangwu"));
ts.add(new Student(1,"zhangsan"));
ts.add(new Student(2,"ahu"));
printElements(ts);
}
}
class Student implements Comparable
{
int num;
String name;
static class StudentComparator implements Comparator
{
public int compare(Object o1,Object o2)
{
Student s1=(Student)o1;
Student s2=(Student)o2;
int result=s1.num>s2.num?1:(s1.num==s2.num?0:-1);
if(result==0)
{
result=s1.name.compareTo(s2.name);
}
return result;
}
}
Student(int num,String name)
{
this.num=num;
this.name=name;
}
public String toString()
{
return num+":"+name;
}
public int compareTo(Object o)
{
Student s=(Student)o;
return num>s.num?1:(num==s.num?0:-1);
}
}
注:HashSet是能過(guò)哈希算法實(shí)現(xiàn)的,其性能通常優(yōu)于TreeSet,只有當(dāng)需要排序功能時(shí),使用后者。
7、 HashMap類與TreeMap類
HashMap類的實(shí)例:
import java.util.*;
public class Test
{
public static void printElements(Collection c)
{
Iterator it=c.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
public static void main(String args[])
{
HashMap hm=new HashMap();
hm.put("one","zhangsan");
hm.put("two","lise");
hm.put("three","wangwu");
System.out.println(hm.get("one"));
System.out.println(hm.get("two"));
System.out.println(hm.get("three"));
//返回此映射中所包含的鍵的 set 視圖
Set keys=hm.keySet();
printElements(keys);
System.out.println("Key:");
//返回此映射所包含的值的 collection 視圖
Collection values=hm.values();
System.out.println("Value:");
printElements(values);
//返回此映射所包含的映射關(guān)系的 collection 視圖
//在返回的集合中,每個(gè)元素都是一個(gè) Map.Entry
Set entry=hm.entrySet();
printElements(entry);
Iterator it=entry.iterator();
while(it.hasNext())
{
Map.Entry me=(Map.Entry)it.next();
System.out.println(me.getKey()+":"+me.getValue());
}
}
}
注:HashMap(對(duì)key散列)一般比TreeMap(據(jù)key排序)速度要快,只有需要排序功能時(shí)才需要后者。TreeMap與HashMap的實(shí)現(xiàn)類似,實(shí)例免。
8、 Properties類
import java.io.*;
import java.util.*;
public class Test
{
public static void main(String args[])
{
Properties pps1=System.getProperties();
pps1.list(System.out);
Properties pps=new Properties();
try
{
//w.ini中存儲(chǔ)的是形如"copyright=20080804"的鍵值對(duì)
//讀寫配置信息
pps.load(new FileInputStream("w.ini"));
Enumeration enumm=pps.propertyNames();
while (enumm.hasMoreElements())
{
String strKey=(String)enumm.nextElement();
String strValue=pps.getProperty(strKey);
System.out.println(strKey+"="+strValue);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
注:同步之外,ArrayList代替Vectior,HashMap代替Hashtable,LinkedList代替Stack