1 / 51

常用数据结构和类

常用数据结构和类. 1. Vector ( 向量)类 2. Hashtable (哈希表或散列表)类 3. Enumeration (枚举)接口 4. Date 类 5. String 类 6. StringBuffer 类 7. StringTokenizer 类. Vector 类. Vector 类似于数组 ,但与数组相比在使用上有以下两个 优点 : (1) 使用的时候无需声明上限 ,随着元素的增加, Vector 的长度会自动增加 (2) Vector 提供额外的方法来 增加、删除元素 ,比数组操作高效. Vector 类有三个构造函数:

elke
Download Presentation

常用数据结构和类

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 常用数据结构和类 1. Vector(向量)类 2. Hashtable(哈希表或散列表)类 3. Enumeration(枚举)接口 4. Date类 5. String类 6. StringBuffer类 7. StringTokenizer类

  2. Vector类 Vector类似于数组,但与数组相比在使用上有以下两个优点: (1) 使用的时候无需声明上限,随着元素的增加,Vector的长度会自动增加 (2) Vector提供额外的方法来增加、删除元素,比数组操作高效

  3. Vector类有三个构造函数: • 1. public Vector(); • 该方法创建一个空的Vector • 2. public Vector(int initialCapacity); • 该方法创建一个初始长度为initialCapacity的Vector • 3.public Vector(int initialCapacity, int capacityIncrement); • 该方法创建一个初始长度为initialCapacity的Vector,当向 • 量需要增长时,增加capacityIncrement个元素

  4. Vector类中添加、删除对象的方法: 1. public void add(int index, Object element) 在index位置添加对象element 2. public boolean add(Object o) 在Vector的末尾添加对象o 3. public Object remove(int index) 删除index位置的对象,后面的对象依次前提

  5. Vector类中访问、修改对象的方法如下: public Object get(int index) 返回index位置对象 public Object set(int index, Object element) 修改index位置的对象为element

  6. 其它方法: public String toString() 将元素转换成字符串 public int size() 返回对象的长度

  7. 【例】操作Vector对象,进行元素的添加、插入、修改和删除 【例】操作Vector对象,进行元素的添加、插入、修改和删除 • //程序文件名为UseVector.java • import java.util.Vector; //引入JDK的Vector类 • public class UseVector • { • public static void main(String[] args) • { • Vector vScore = new Vector(); • vScore.add("86");//添加元素 • vScore.add("98");//添加元素 • vScore.add(1, "99");//插入元素 • for (int I = 0; I < vScore.size(); I++) • { • System.out.print(vScore.get(i) + " "); //输出结果 • }

  8. vScore.set(1, " 77");//修改第二个元素 vScore.remove(0); //删除第一个元素 System.out.println(″\n修改并删除之后″); for (int I = 0; I< vScore.size(); I++) { System.out.print(vScore.get(i) + " "); } System.out.println(" \n转换成字符串之后的输出\n" + vScore.toString()); } };

  9. Hashtable类 • Hashtable(哈希或散列)类存储的是对象的名-值对 • (或名键-值键对) • 将对象的名和它的值相关联同时存储,并可以根据对象名来 • 提取它的值 • 一个名只能对应着一个值,而一个值可以对应多个名 名 值

  10. Hashtable类构造函数: • 1. public Hashtable() • 构建哈希表 • 2. public Hashtable(int initialCapacity) • 构建长度为initialCapacity的散列表

  11. Hashtable类其他常用方法 public int size() 返回散列表的名的个数 public Object remove(Object key) 删除散列表中key名及其对应的value值 public Object put(Object key,Object value) 将对象名key和对象值value存放到散列表中 public Object get(Object key) 返回散列表key名对应的值 public String toString() 转换成字符串

  12. 【例】操作Hashtable对象,进行添加、修改、删除等操作 【例】操作Hashtable对象,进行添加、修改、删除等操作 • //程序文件名为UseHashtable.java • import java.util.Hashtable;// 引入哈希表类 • public class UseHashtable • { • public static void main(String[] args) • { • Hashtable hScore = new Hashtable();

  13. hScore.put("张一","86"); hScore.put("李二","98"); hScore.put("海飞","99"); System.out.println("转换成字符串之后的输出:" + hScore.toString()); hScore.put("李二","77"); hScore.remove("张一"); System.out.println("修改并删除之后"); System.out.println("转换成字符串之后的输出:" + hScore.toString()); } }

  14. Enumeration接口 通过实现Enumeration接口的对象生成一系列元素,并且通过nextElement()方法依次读取下一个元素。 只有以下两个方法: public boolean hasMoreElements() 测试是否还有元素 public Object nextElement() 返回枚举的下一个元素

  15. Enumeration接口 Enumeration接口及其方法通常与Vector、Hashtable一起连用,用来枚举Vector中的项和Hashtable中的名

  16. 【例】使用Enumeration接口枚举Vector中的对象和Hashtable对象中的名,并进行输出【例】使用Enumeration接口枚举Vector中的对象和Hashtable对象中的名,并进行输出 //程序文件名UseEnumeration.java import java.util.*; public class UseEnumeration { public static void main(String[] args) { Vector vScore = new Vector(); vScore.add("86"); vScore.add("98"); vScore.add(1,"99");

  17. System.out.println("Vector:" + vScore.toString()); for (Enumeration e = vScore.elements() ; e.hasMoreElements() ;) System.out.println(e.nextElement());

  18. Hashtable hScore = new Hashtable(); hScore.put("张一","86"); hScore.put("李二","98"); hScore.put("海飞","99"); System.out.println("Hashtable:" + hScore.toString()); for (Enumeration e = hScore.keys(); e.hasMoreElements();) { String str = (String)e.nextElement(); System.out.print(str + ":"); System.out.println(hScore.get(str)); } } }

  19. Date类 • Date类用来指定日期和时间,其构造函数如下: • public Date() • 从当前时间构造日期时间对象

  20. Date类 • Date类常用方法如下: • public String toString() • 转换成字符串 • public long getTime() • 返回自新世纪以来的毫秒数,可以用于时间计算

  21. 【例】测试执行循环花费的时间(数量级为毫秒),具体时间情况如图3.9所示。源程序代码如下:【例】测试执行循环花费的时间(数量级为毫秒),具体时间情况如图3.9所示。源程序代码如下: • //程序文件名为UseDate.java • import java.util.Date; // 引入Date类 • public class UseDate • { • public static void main(String[] args) • { • Date dOld = new Date(); • long lOld = dOld.getTime(); • System.out.println("循环前系统时间为:" +dOld.toString());

  22. int sum = 0; for (int i=0; i<100; i++) { sum += i; } Date dNew = new Date(); long lNew = dNew.getTime(); System.out.println("循环后系统时间为:" +dNew.toString()); System.out.println("循环花费的毫秒数为:" + (lNew - lOld)); } }

  23. String类 • String类用于操作非数值型字符串,它提供了七类方法操作: • 1. 字符串创建(构造) • public String() • 构造一个空字符串 • public String(char[] value) • 使用字符数组value中的字符以构造一个字符串 • public String(String original) • 使用原字符串original的拷贝以构造一个新字符串

  24. 2. 字符串长度 public int length() 返回字符串的长度 3. 字符串比较 public boolean equals(Object anObject) 比较字符串是否与anObject代表的字符串相同(区分大小写) public boolean equalsIgnoreCase(String anotherString) 比较字符串是否与anotherString相同(不区分大小写)

  25. 4. 字符串检索 public int indexOf(String str) 返回一个字符串中str第一次出现所在的位置 public int indexOf(String str, int fromIndex) 返回从fromIndex开始字符串str出现所在的位置

  26. 5. 字符串截取 public String substring(int beginIndex, int endIndex) 返回benginIndex到endIndex之间的字符串 6. 字符串运算 运算符为“+”,表示连接运算,如: System.out.println("Hashtable:" + hScore.toString());

  27. 【例】操作字符串 • //程序文件名为TestString.java • public class TestString • { • public static void main(String[] args) • { • String str = new String("The substring begins at the specified beginIndex."); • String str1 = new String("string"); • String str2 = new String(); • int size = str.length();//字符串长度

  28. int flag = str.indexOf("substring"); str2 = str.substring(flag,flag + 9);//取子字符串 System.out.println("字符串" + str + "\n总长度为:" + size); if(str1.equals(str2))//判断是否相等 System.out.println("截取的字符串为:" + str1); else System.out.println("截取的字符串为:" + str2); } }

  29. 图3.10 操作字符串的输出

  30. 7. 数据类型转换 • 各种原始数据类型与String类型之间可以通过方法相互转换 • valueOf()静态方法用于将其它对象(原始数据类型对象)转换成字符串。例如: • public static String valueOf(Boolean b) • public static String valueOf(char c) • public static String valueOf(int i) • public static String valueOf(long l) • public static String valueOf(float f) • public static String valueOf(double d)

  31. 具体实例如下: (1) 从int转换到String。 例如: int intvar = 1; String strvar; strvar = String.valueOf (intvar); //"1"

  32. (2) 从float转换到String。 例如: float fltvar = 9.99f; String strvar; strvar = String.valueOf(fltvar); //"9.99"

  33. (3) 从double转换到String。 例如: double dblvar = 99999999.99; String strvar; strvar = String.valueOf (dblvar); //"9.999999999E7"

  34. (4) 从char转换到String。 例如: char chrvar = 'a'; String strvar; strvar = String.valueOf (chrvar); //"a"

  35. (5) 从String转换到int、float、long、double。 例如: String intstr = "10"; String fltstr = "10.1f"; String longstr = "99999999"; String dblstr = "99999999.9"; int i = Integer.parseInt(intstr); //10 float f = Float.parseFloat(fltstr); //10.1 long lo = Long.parseLong(longstr); //99999999 double d = Double.parseDouble(dblstr); //9.99999999E7

  36. (6) 从String转换到byte、short。 例如: String str = "0"; byte b = Byte.parseByte(str); //0 short sh = Short.parseShort(str);//0

  37. (7) 从String转换到char。 例如: String str = "abc"; char a = str.charAt(0);//返回字符a

  38. (8) 从String转换到boolean。 例如: String str = "true"; Boolean flag = Boolean.valueOf(str);//true

  39. StringBuffer类 • StringBuffer类提供了一个字符串的可变序列: • 类似于String类,但它对存储的字符序列可以任意修改,使用起来比String类灵活得多 • 常用的构造函数为: • StringBuffer() • 构造一个空StringBuffer对象,初始容量为16个字符 • StringBuffer(String str) • 构造一个StringBuffer对象,初始内容为字符串str的拷贝

  40. StringBuffer类 对于StringBuffer类,除了String类中常用的像长度、字符串截取、字符串检索的方法可以使用之外,还有两个较为方便的方法系列,即append方法系列和insert方法系列。

  41. (1) append方法系列根据参数的数据类型在StringBuffer对象的末尾直接进行数据添加 • public StringBuffer append (boolean b) • public StringBuffer append (char c) • public StringBuffer append (char[] str) • public StringBuffer append (char[] str, int offset, int len) • public StringBuffer append (double d) • public StringBuffer append (float f) • public StringBuffer append (int i) • public StringBuffer append (long l) • public StringBuffer append (Object obj) • public StringBuffer append (String str) • public StringBuffer append (StringBuffer sb)

  42. (2) insert方法系列根据参数的数据类型在StringBuffer的offset位置进行数据插入 • public StringBuffer insert (int offset, boolean b) • public StringBuffer insert (int offset, char c) • public StringBuffer insert (int offset, char[] str) • public StringBuffer insert(int offset, float f) • public StringBuffer insert(int offset, int i) • public StringBuffer insert(int offset, long l) • public StringBuffer insert(int offset, Object obj) • public StringBuffer insert(int offset, String str)

  43. (3) toString()方法用于将stringbuffer对象的数据转换成字符串: public String toString()

  44. 【例】StringButter操作 //程序文件名为TestString.java public class TestString { public static void main(String[] args) { StringBuffer str = new StringBuffer("The substring begins at the specified beginIndex."); StringBuffer str1 = new StringBuffer("string"); String str2 = new String(); int size = str.length(); int flag = str.indexOf("substring");

  45. str2 = str.substring(flag,flag + 9);// 以上方法string类中也可以支持 StringBuffer strOut = new StringBuffer(“字符串”); strOut.append(str); strOut.append("总长度为:"); strOut.append(size); int f = strOut.indexOf("总"); strOut.insert(f,'\n'); System.out.println(strOut.toString()); if(str1.toString().equals(str2)) System.out.println("截取的字符串为:" + str1.toString()); else System.out.println("截取的字符串为:" + str2); } }

  46. StringTokenizer类 StringTokenizer类是一个实现Enumeration接口的类 它使得应用程序可以将字符串分成多个记号,默认情况下以空格为分隔符 例如将字符串“this is a test”分成四个单词记号。 用户也可以指定分隔符

  47. StringTokenizer类 • StringTokenizer类构造函数如下: • StringTokenizer(String str) • 以字符串str构建StringTokenizer对象。 • StringTokenizer(String str, String delim) • 使用delim分隔符,以初始字符串str构建StringTokenizer对象。

  48. StringTokenizer常用方法如下: int countTokens() 返回识别的总记号数。 boolean hasMoreTokens() 测试是否还有识别的记号。 boolean nextToken(String delim) 返回字符串delim分隔的下一个记号。 String nextToken() 返回下一个识别的记号。

  49. 【例】使用StringTokenizer类分割字符串 • import java.util.*; • public class UseToken • { • public static void main(String[] args) • { • String str = "数学::英语::语文::化学"; • StringTokenizer st = new StringTokenizer(str,"::"); • System.out.println(str + "\n课程数为:" +st.countTokens());

  50. while (st.hasMoreTokens()) { System.out.println(st.nextToken("::")); } str = "Hello this is a test"; st = new StringTokenizer(str); System.out.println(str + "\n单词数为:" +st.countTokens()); while (st.hasMoreTokens()) { System.out.println(st.nextToken()); } } }

More Related