- 1. Java集合类集合类概述
集合类作用、特点
旧的集合类介绍
Vector、Hashtable、Stack
新的集合类介绍
Collection、Set、Map、List
1
- 2. 集合类概述集合类的作用:
Java的集合类提供了一些基本数据结构的支持。
例如Vector、Hashtable、Stack等。
集合类的使用:
Java的集合类包含在java.util包中。
import java.util.*;
2
- 3. 集合类概述集合类特点一:
只容纳对象。这一点和数组不同,数组可以容纳
基本数据类型数据和对象。
如果集合类中想使用基本数据类型,又想利用
集合类的灵活性,可以把基本数据类型数据封装
成该数据类型的对象,然后放入集合中处理。
3
- 4. 集合类概述集合类特点二:
集合类容纳的对象都是Object类的实例,一旦把
一个对象置入集合类中,它的类信息将丢失,这样设
计的目的是为了集合类的通用性。
因为Object类是所有类的祖先,所以可以在这些
集合中存放任何类的对象而不受限制,但是切记在使
用集合成员之前必须对它重新造型。
4
- 5. 集合类概述下面根据JDK版本分两部分介绍Java的
集合类。
第一部分:JDK1.1版本中的集合类。
第二部分:JDK1.2以后版本中的集合类。
5
- 6. 数组数组
基本数据类型数组
对象数组
举例说明数组的定义、使用。
6
- 7. class Honeybee{
int value;
Honeybee(int v){
value=v;
}
public String toString(){
return new Integer(value).toString();
}
}
public class ArraySize{
public static void main(String[] args){
Honeybee[] a;
/* System.out.println(a.length); 产生编译错误,因为a没有定义大小*/
Honeybee b[] = new Honeybee[5];
System.out.println(b.length); //输出5
for(int i=0; i
- 8. Honeybee[] c = new Honeybee[4];
for(int i=0; i
- 9. public class ArraySize2{
public static void main(String[] args){
int[] a;
/* System.out.println(a.length); 产生编译错误,因为a没有定义大小*/
int b[] = new int[5];
System.out.println(b.length); //输出5
for(int i=0; i
- 10. int[] d= {100,200,300};
System.out.println(d.length); // 输出3
a = d; //数组之间赋值
System.out.println(a.length); // 输出3
for(int i=0; i
- 11. 旧的集合类Vector
Stack
Hashtable
11
- 12. Vector类Vector类实现了长度可变的数组。
Vector中只能存放对象。
Vector的元素通过下标进行访问。
Vector类关键属性:
capacity表示集合最多能容纳的元素个数。
capacityIncrement表示每次增加多少容量。
size表示集合当前元素个数。
Vector v = new Vector(100)12
- 13. Vector类Vector类关键方法:
void addElement(Object obj)
void add(int index, Object element)
Object elementAt(int index)
void insertElementAt(Object obj, int index)
13
- 14. Vector类举例1import java.util.Vector;
class Cat {
private int catNumber;
Cat(int i){catNumber = i;}
void print(){System.out.println("Cat #"+catNumber);}
}
class Dog {
private int dogNumber;
Dog(int i){dogNumber = i;}
void print(){System.out.println("Dog #"+dogNumber);}
}
转下页
14
- 15. Vector类举例1接上页:
public class CatsAndDogs{
public static void main(String[] args){
Vector cats = new Vector();
for(int i=0; i<7; i++)
cats.addElement(new Cat(i));
cats.addElement(new Dog(7));
for(int i=0; i
- 16. Vector类举例2修改Vector例1,用Enumeration。
import java.util.Vector;
import java.util.Enumeration;
class Cat {
private int catNumber;
Cat(int i){catNumber = i;}
void print(){System.out.println("Cat #"+catNumber);}
}
class Dog {
private int dogNumber;
Dog(int i){dogNumber = i;}
void print(){System.out.println("Dog #"+dogNumber);}
}
转下页
16
- 17. Vector类举例2接上页:
public class CatsAndDogs{
public static void main(String[] args){
Vector cats = new Vector();
for(int i=0; i<7; i++)
cats.addElement(new Cat(i));
cats.addElement(new Dog(7));
// for(int i=0; i
- 18. Stack类Stack类是Vector的子类。
Stack类描述堆栈数据结构,即LIFO。
Stack类的关键方法:
public void push(Object item)
public Object pop()
public Object peek()
public boolean empty()
演示//把项压入栈顶 移除栈顶对象并作为此函数的值返回该对象 //查看栈顶对象而不移除它 // 测试堆栈是否为空 18
- 19. Stack类举例
import java.util.*;
public class Stacks{
static String[] months={"1","2","3","4"};
public static void main(String[] args){
Stack stk = new Stack();
for(int i=0; i
- 20. Hashtable类Hashtable通过键来查找元素。
Hashtable用一个特殊的值来确定键,名为hashcode(散列码)。所有对象都有一个
散列码,可以通过Object 类的hashCode()
方法获得。
20
- 21. Hashtable举例该例子用来检验Math.random()方法的随
机性。在理想情况下,它应该产生一系列完
美的随机分布的数字。为了验证这一点,我
们需要生成数量众多的随机数字,然后计算
落在不同范围内的数字量。该程序生成
10000个随机数,看它们在0~20之间的
分布如何。
返回带正号的 double 值,大于或等于 0.0,小于 1.0。 21
- 22. Hashtable举例
import java.util.*;
class Counter{
int i=1;
public String toString(){
return Integer.toString(i); }
}
public class Statistics{
public static void main(String[] args){
Hashtable ht = new Hashtable();
for(int i=0; i<10000; i++){
Integer r = new Integer((int)(Math.random()*20));
if(ht.containsKey(r))
((Counter)ht.get(r)).i++;
else
ht.put(r, new Counter());
}
System.out.println(ht);
}
}22
- 23. 新集合类Java1.2开始又一个庞大的集合体系,它用来完成各种集合操作。
Collection
List
Set
Map
23
- 24. 集合框架中的接口24
- 25. 集合框架中的接口Collection:集合层次中的根接口,JDK没有提供这个接口直接的实现类。
Set:不能包含重复的元素。SortedSet是一个按照升序排列元素的Set。
List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。
Map:包含了key-value对。Map不能包含重复的key。SortedMap是一个按照升序排列key的Map。25
- 26. Collection26
- 27. SetSet中的元素必须唯一。
添加到Set中的元素必须定义equals方法,以提供算法来判断欲添加进来的对象是否与已经存在的某对象相等,从而建立对象的唯一性。
实现Set接口的类有HashSet,TreeSet。
4627351Set集27
- 28. Set28
- 29. Set举例import java.util.*;
public class SetDemo {
public static void main(String[] argv) {
HashSet h = new HashSet(); //也可以 Set h=new HashSet()
h.add("One");
h.add("Two");
h.add("One"); // DUPLICATE
h.add("Three");
Iterator it = h.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
29
- 30. 回顾:接口可以作为一种引用类型使用,如:
DriveControl control = new Car();
control.startEngine(); 接口创建一个完整的Car实例,Car是
实现接口DriveControl的一个类//访问接口中定义的方法P4930
- 31. Set举例import java.util.*;
public class SetDemo {
public static void main(String[] argv) {
HashSet h = new HashSet(); //也可以 Set h=new HashSet()
h.add("One");
h.add("Two");
h.add("One"); // DUPLICATE
h.add("Three");
Iterator it = h.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
Iterator讲解 见P132 6.3.431
- 32. ListList的明显特征是它的元素都有一个确定的顺序。
实现它的类有ArrayList和LinkedList。
ArrayList内存中是顺序存储的。
LinkedList内存中是以链表方式存储的。
2114List (列表)012332
- 33. ArrayList举例
import java.util.*;
public class ArrayListDemo {
public static void main(String[] argv) {
ArrayList al = new ArrayList();
// Add lots of elements to the ArrayList...
al.add(new Integer(11));
al.add(new Integer(12));
al.add(new Integer(13));
al.add(new String("hello"));
// First print them out using a for loop.
System.out.println("Retrieving by index:");
for (int i = 0; i
- 34. LinkedList类举例:
import java.util.*;
public class LinkedListDemo {
public static void main(String[] argv) {
LinkedList l = new LinkedList();
l.add(new Object());
l.add("Hello");
l.add("zhangsan");
ListIterator li = l.listIterator(0);
while (li.hasNext())
System.out.println(li.next());
if (l.indexOf("Hello") < 0)
System.err.println("Lookup does not work");
else
System.err.println("Lookup works");
}
}34
- 35. MapMap接口用来维持
很多“键-值”对,以
便通过键来查找相应
的值。
HashMap基于散列
表实现(替代Hashtable)
TreeMap在一个二
叉树的基础上实现
k3→v2k1 →v1k2 →v1k4 →v3Map(映射)35
- 36. HashMap举例:
import java.util.*;
public class HashMapDemo {
public static void main(String[] argv) {
HashMap h = new HashMap();
// The hash maps from company name to address.
h.put("Adobe", "Mountain View, CA");
h.put("IBM", "White Plains, NY");
h.put("Sun", "Mountain View, CA");
String queryString = "Adobe";
String resultString = (String)h.get(queryString);
System.out.println("They are located in: " + resultString);
}
}36