J2SE第七章容器个人学习笔记_第1页
J2SE第七章容器个人学习笔记_第2页
J2SE第七章容器个人学习笔记_第3页
J2SE第七章容器个人学习笔记_第4页
免费预览已结束,剩余5页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第七章 .容器11361图 API 类图结构图1类 Collection 类3知识点 For Generic(泛型 ) Auto Boxing and Unboxing6接口 Collection Set List Map Iterator Comparable1. 容器java API 所提供的一系列类的实例,用于在程序中存放对象J2SDK所提供的容器API 位于 util 包内容器 API 的类图结构如图:容器API1.Collection 接口 (一个一个的装 ):定义了存取一组对象的方法,其子接口Set 和 List 分别定义了存储方式Set 中的数据对象没有顺序并且不可以重复。(两对

2、象互相equals 相等则重复)List 中的数据对象有顺序并且可以重复。2. Map 接口 (一对一对的装 ):定义了存储“ 键 (key) 值 (value) 映射对 ”的方法2. Collection 接口Collection 接口中所定义的方法:例举 12009-12-21 20:49:57-2010-3-28 13:10:54例举 202_Collection_2.avicontainer BasicContainer.javapublic class BasicContainer public static void main(String args) Collection c =

3、 new HashSet(); c.add("hello");c.add(new Name("f1","l1"); c.add(new Integer(100); c.remove("hello"); / 如果 equals 则去除public String toString() return firstName + " " + lastName; / 重写 equals 方法public boolean equals(Object obj) if (obj instanceof Name) N

4、ame name = (Name) obj;return (firstName.equals(name.firstName)&&(lastName.equals(name.lastName);return super.equals(obj);public int hashCode() return firstName.hashCode();class Name implements Comparable public int compareTo(Object o) private String firstName,lastName;Name n = (Name)o;public

5、 Name(String firstName, String lastName) int lastCmp =this.firstName=firstName;this.lastName=lastNpareTo(n.lastName);lastName;return(lastCmp!=0 ? lastCmp :public String getFirstName() return firstName;firstNpareTo(n.firstName);publicStringgetLastName()returnlastName;注意:重写equals 方法必须重新hashCode 方法当一个类

6、的某个对象当做索引,会使用hashcode 方法public boolean equals(Object obj) if (obj instanceof Name) Name name = (Name) obj;return (firstName.equals(name.firstName)&& (lastName.equals(name.lastName);return super.equals(obj);public int hashCode() return firstName.hashCode();3.Iterator接口(方便遍历)相当于指针、游标,每一种容器有自己的

7、Iterator接口例举注意: Iterator 对象的 remove 方法是在迭代过程中删除元素的唯一安全方法2010-3-28 14:44:34 - 2010-3-28 20:32:23知识点 1: JDK1.5 增强 For 循环4.Set接口Set 接口是 Collection重复。Set 容器可以与数学中J2SDK API中所提供的的子接口 ,Set 接口没有提供额外的方法”集合 ”的概念想对应。Set 容器类有HashSet,TreeSet等。,但实现Set接口的容器类中的元素是没有顺序的,且不可5. List 接口 类似数组 (大小自动增加 )List 接口是 Collectio

8、n 的子接口 ,实现 List 接口的容器类中的元素是有顺序的,而且可以重复。List 容器的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器总的元素。J2SDK所提供的List 容器类有ArrayList,LinkedList 等。例举List 常用算法:类 Java.util.Collections 提供了一些静态方法实现了机遇List 容器的一些常用算法。voidsort(List) 对 List 容器内的元素排序voidshuffle(List) 对 List 容器内的对象进行随机排序voidreverse(List) 对 List 容器内的对象进行逆序排序void

9、fill(List, object) 用一个特定的对象重写整个List 容器voidcopy(List dest , List src)将 src List 容器内容拷贝到dest List 容器intbinarySearch(List , Object) 对于顺序的 List 容器 ,采用二分搜索法查找特定对象例举6. Comparabl e 接口 2010-3-30 13:29:46实现了这个接口的类,他们之间的对象可以互相比较大小。如何选择数据结构衡量标准:读的效率和改的效率Array 读快改慢Linked 改快读慢Hash 两者之间7. Map 接口实现 Map 接口的类用来存储键-值

10、 对Msp 接口的实现类有HashMap 和 TreeMap 等Map 类中存储的键 -值对通过键来标识,所以键值不能重复Objectput (Object key , Object value);/ 将 key 的值改为 value(如果存在 key),并将对象返回Objectput (Object key);/ 通过 key找到 value 对象Objectremove(Objectkey); / 把 key 对应的 value 去掉booleancontainsKey(Object key); / 是不是包含 keybooleancontainsValue(Object value);/

11、 是不是包含 valueintsize(); / 装了多少对对象booleanisEmpty();/ 是不是空的voidputAll(Map t);/ 把另外一个 Map 里面的东西全部加进来voidclear(); / 清除知识点 2:自动打包解包(jdk1.5 以后 ) Auto Boxing and Unboxing打包:自动将基础类型转换为对象解包:自动将对象转换为基础类型例如: ContainerTestMap.javaimport java.util.*;System.out.println(m1.containsKey("one");public class

12、TestMap System.out.printlnpublic static void main(String args) /(m2.containsValue(new Integer(1);Map m1 = new HashMap();(m2.containsValue(1);Map m2 = new TreeMap();if(m1.containsKey("two") /m1.put("one",new Integer(1);/int i = (Integer)m1.get("two").intValue();m1.put(&q

13、uot;one", 1);int i = (Integer )m1.get("two");/系统不知道是否能/m1.put("two",new Integer(2);转换为 Integer 型,但是手动转换为Integer 型后系统自m1.put("two", 2);动解包为相对应的值/m1.put("three",new Integer(3);System.out.println(i);m1.put("three", 3);/m2.put("A",new Inte

14、ger(1);Map m3 = new HashMap(m1);m2.put("A", 1);m3.putAll(m2);/m2.put("B",new Integer(2);System.out.println(m3);m2.put("B", 2);System.out.println(m1.size();练习 1containerTestArgsWords.java显示每个单词重复个数!public class TestArgsWords /private static final Integer ONE = new Intege

15、r(1);private static final int ONE = 1;public static void main(String args) Map m = new HashMap();for (int i = 0; i < args.length; i+) /Integer freq = (Integer) m.get(argsi);int freq = (Integer) m.get(argsi) = null ? 0 : (Integer) m.get(argsi);/第一次为空值不能转换类型,需要这样写/m.put(argsi,(freq = null? ONE : ne

16、w Integer(Value() + 1);m.put(argsi, freq=0 ? ONE : freq + 1);(m.size() + " distinct words detected:");知识点3 Generic泛型jdk1.5指定特定类型ArrayList<E>(当然是在能指定的情况下)起因:jdk1.4以前的类型不明确:装入集合的类型都被当做Object 对待 ,从而失去自己的实际类型。从集合中取出时往往需要转换类型,效率低,容易产生错误。解决办法:在定义集合的时候同时定义集合中对象的类型例如: BasicGeneric.ja

17、va可以在定义Collection 的时候指定也可以在循环时使用Iterator 指定好处:增强程序的可读性和稳定性如 API 中有 ArrayList<E> 则说明可以指定特定类型例举 container BasicGeneric.javapublic class BasicGeneric public static void main(String args) List<String> c = new ArrayList<String>(); / 只能装 Sring 类型 泛型的使用 c.add("aaa");c.add("

18、bbb");c.add("ccc");for(int i=0; i<c.size(); i+) / 遍历String s = c.get(i);Collection<String> c2 = new HashSet<String>();c2.add("aaa"); c2.add("bbb"); c2.add("ccc");for(Iterator<String> it = c2.iterator(); it.hasNext(); ) String s = it.next();class MyName implements Comparable<MyName> int age;public int compareTo(MyName mn) if(this.age > mn.age) return 1;else if(this.age < mn.age) return -1;else return 0;将前面讲的修改为泛型TestMap2.javapublic class TestMap2 public static void main

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论