第5章 Java集合类
第5章 Java集合类
本章目录
Vector Stack Hashtable ArrayList
Vector
Vector可以合理的管理多个对象,并方 便地提供对象的查找、新增等功能。 Vector的Size方法可以返回元素个数的 总数 方法原型为: public int size()
import java.util.ArrayList; public class Test { public static void main(String[] args) { ArrayList<ArrayList<Integer>> vArr = new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> strV3 = new ArrayList<Integer>(); strV3.add(1);strV3.add(2); strV3.add(3);strV3.add(4);strV3.add(5); ArrayList<Integer> strV4 = new ArrayList<Integer>(); strV4.add(6);strV4.add(7); strV4.add(8);strV4.add(9); vArr.add(strV3);vArr.add(strV4); for(ArrayList<Integer> arr : vArr) { for(Integer s:arr) System.out.println(s); } } }
3.编程题
存在如下5个字符串:
第1个点: 0,0 第2个点: 1,1 第3个点: 2,4 第4个点: 3,9 第5个点:4,16
“x=4:y=16” “x=3:y=9” “x=2:y=4” “x=1:y=1” “x=0:y=0”
提取其中以数字形式存在的x、y数值坐标,创 建其对应的点对象。并将这些点对象通过 ArrayList对象来集中管理:如通过ArrayList对 象输出5个点对象的x、y坐标值。且输出形式 为:
Vector应用实例
import java.util.Vector; public class testStack { public static void main(String[] args) { Vector theVector = new Vector(); for (int i=0;i<10;i++) { Integer newInteger = new Integer(i); theVector .addElement(newInteger); } for (int k=0;k<theVector.size();k++) System.out.println(theVector.elementAt(k)); } }
4.7 ArrayList
import java.util.ArrayList; public class testArraylist { public static void main(String[] args) { ArrayList<Integer> theArray = new ArrayList<Integer>(); for (int i=0;i<10;i++) { Integer newInteger = new Integer(i); theArray.add(newInteger); } for (int k=0;k<theArray.size();k++) System.out.println(theArray.get(k)); } }
Hale Waihona Puke 0 1 2 33 3 4 5 6 7 8 9
[0, 1, 2, 33, 3, 4, 5, 6, 7, 8, 9]
Vector可以自动维护索引。
Vector应用举例:找出下列程序的 错误
import java.util.Vector; public class Test { public static void main(String[] args) { Vector theVector = new Vector(); for (int i=0;i<10;i++) { point val = new point(i,i*i); theVector .addElement(val); } for (int k=0;k<theVector.size();k++){ System.out.println(theVector.elementAt(k).y);} class point { int x,y;public point(int i,int j){x=i;y=j;} }
0 1 4 9 16 25 36 49 64 81
思考:
应改成: System.out.println(((point)theVector.elem entAt(k)).y); 能否使用这个集合类的时候不去这样繁 琐地进行类型转换呢?
Vector应用举例:注意集合类的类 型参数
import java.util.Vector; public class Test { public static void main(String[] args) { Vector<point> theVector = new Vector<point>(); for (int i=0;i<10;i++) { point val = new point(i,i*i); theVector .addElement(val); } for (int k=0;k<theVector.size();k++){ System.out.println(theVector.elementAt(k).y);} class point { int x,y;public point(int i,int j){x=i;y=j;} }
0 1 2 3 4 5 6 7 8 9
import java.util.Vector; public class testStack { public static void main(String[] args) { Vector theVector = new Vector(); for (int i=0;i<10;i++) { Integer newInteger = new Integer(i); theVector .addElement(newInteger); } theVector.add(3, new Integer(33)); for (int k=0;k<theVector.size();k++) System.out.println(theVector.elementAt(k).toString()); } }
0 1 4 9 16 25 36 49 64 81
Stack
4.5中提到Stack是Vector的子类,有“后 进先出”的特性,主要体现在两个方法 上:pop和push。使用pop方法可以方便 的将栈顶的元素得到。
import java.util.*; “后进先出” public class testStack{ public static void main(String[] args) { point p; Stack mystack1 = new Stack(); class point Stack<point > mystack1 = new Stack<point>(); for(int i=0; i<5; i++) { { int x,y; } p=new point(); 输出结果为: p.x= i; p.y=i*i; x: 4y:16 mystack1.push(p); x: 3y:9 x: 2y:4 } x: 1y:1 for (int i=0;i<5;i++) x: 0y:0 { p=(point)mystack1.pop(); mystack1.pop(); System.out.println("x: "+p.x+"y:"+p.y ); } } }
运行 结果 为: 1 2 3 4 5 6 7 8 9
使用Hashtable存储每个 import java.util.Hashtable; public class Test { 学号对应的学生年龄 public static void main(String[] args) { Hashtable<String ,Integer> hTable = new Hashtable<String,Integer>(); hTable.put("003",20); hTable.put("001",19); hTable.put("002",22); if (hTable.containsKey("004")) System.out.print( hTable.get("004")); else { hTable.put("004",21); } 运行结 java.util.Iterator<String> it = hTable.keySet().iterator(); 果为: while (it.hasNext()){ 004:21 String s =it.next(); 003:20 System.out.print(s+":"); System.out.println(hTable.get(s)); 002:22 } 001:19 }