动力节点 http://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.com 1 1.1.1.1. 纲要 a) 主要集合概述 b) Collection 和Iterator c) List d) Set e) Map f) Collections 工具类 g) Comparable与Comparator 2.2.2.2. 内容 2.12.12.12.1、主 要集 合概述 、主 要集 合概述 、主 要集 合概述 、主 要集 合概述 Java集合主要有 3种重要的类型: � List:是一个有序集合,可以放重复的数据 � Set:是一个无序集合,不允许放重复的数据 � Map:是一个无序集合,集合中包含一个键对象,一个值对象,键对象不允许重复, 值对象可以重复(身份证号—姓名) Collection <> List <> Set <> ArrayList LinkedList HashSet Map <> HashMap Iterator <> ListIterator <> SortedSet <> TreeSet SortedMap <> TreeMap Comparator <> Comparable <> Vector Stack Hashtable PropertiesEnumeration <> Collections 2.22.22.22.2、、、、Collection Collection Collection Collection 和和和和IteratorIteratorIteratorIterator Collection 是List和Set 的父接口,在 Collection 中定义了一些主要方法 动力节点 http://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.com 2 boolean add(E o) 确保此 collection 包含指定的元素(可选操作)。 boolean addAll(Collection c) 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 void clear() 移除此 collection 中的所有元素(可选操作)。 boolean contains(Object o) 如果此 collection 包含指定的元素,则返回 true。 boolean containsAll(Collection c) 如果此 collection 包含指定 collection 中的所有 元素,则返回 true。 boolean equals(Object o) 比较此 collection 与指定对象是否相等。 int hashCode() 返回此 collection 的哈希码值。 boolean isEmpty() 如果此 collection 不包含元素,则返回 true。 Iterator iterator() 返回在此 collection 的元素上进行迭代的迭代器。 boolean remove(Object o) 从此 collection 中移除指定元素的单个实例,如果 存在的话(可选操作)。 boolean removeAll(Collection c) 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 boolean retainAll(Collection c) 仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 int size() 返回此 collection 中的元素数。 Object[] toArray() 返回包含此 collection 中所有元素的数组。 T[] toArray(T[] a) 返回包含此 collection 中所有元素的数组;返回数 组的运行时类型与指定数组的运行时类型相同。 关于 Iterator接口说明,Iterator称为迭代接口,通过此接口可以遍历集合中的数据,此接口 动力节点 http://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.com 3 主要方法为: boolean hasNext() 如果仍有元素可以迭代,则返回 true。 E next() 返回迭代的下一个元素。 2.32.32.32.3、、、、List List List List 接口接口接口接口 2.3.12.3.12.3.12.3.1、List List List List 接口概述 List接口下面主要有两个实现 ArrayList和LinkedList,他们都是有顺序的,也就是放进 去是什么顺序,取出来还是什么顺序,也就是基于线性存储,可以看作是一个可变数组 � ArrayList:查询数据比较快,添加和删除数据比较慢(基于可变数组) � LinkedList:查询数据比较慢,添加和删除数据比较快(基于链表数据结构) � Vector:Vector 已经不建议使用,Vector 中的方法都是同步的,效率慢,已经被 ArrayList取代 � Stack是继承 Vector 实现了一个栈,栈结构是后进先出,目前已经被 LinkedList取 代 import java.util.*; public classArrayListTest01 { public static void main(String[] args) { //最好不要这样写,这样属于面向具体编程了 //无法达到灵活互换 //最好面向接口编程 ArrayList arrayList = newArrayList(); //采用面向接口编程 //使用 Collection 会更灵活,如果 List不能满足要求 //那么可以采用 HashSet,因为 HashSet 也实现了该接口 Collection c = newArrayList(); //面向接口编程 //采用 list接口可以使用 Collection 里的方法 //也可以使用 list接口扩展的方法 List l = newArrayList(); //自动装箱,适合于 jdk1.5 l.add(1); l.add(3); 动力节点 http://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.com 4 //jdk1.5 以前,必须如下使用 l.add(new Integer(2)); l.add(new Integer(4)); //可以加入重复数据 l.add(2); //不能加入字符串 //在强制转换时会出现 ClassCastException 错误 //l.add("sadfdsfs"); //可以采用 List接口的中 get()方法依次取得元素 //输出结果为,不会打乱顺序 /* 1 3 2 4 2 */ for (int i=0; i l = new ArrayList(); l.add(1); l.add(2); l.add(3); //不能将 abc放到集合中,因为使用泛型,在编译器就可以返现错误 //l.add("abc"); for (Iterator iter=l.iterator(); iter.hasNext();) { //因为使用泛型,在编译器就可以发现错误 动力节点 http://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.com 31 //String s = (String)iter.next(); //使用泛型可以不用进行强制转换 //Integer s = (Integer)iter.next(); //可以直接取得相应的元素,使用泛型返回的是真正的类型 Integer s = iter.next(); System.out.println(s); } } } 2.7.32.7.32.7.32.7.3、采用泛型来改善自定义比较器 import java.util.*; public class GenericTest03 { public static void main(String[] args) { Person p1 = new Person(); p1.name = "张三"; p1.age = 20; Person p3 = new Person(); p3.name = "张三"; p3.age = 40; Person p2 = new Person(); p2.name = "李四"; p2.age = 30; Set set = newTreeSet(); set.add(p1); set.add(p2); set.add(p3); for (Iterator iter=set.iterator(); iter.hasNext();) { Person p = iter.next(); System.out.println("name=" + p.name + ", age=" + p.age); } } } 动力节点 http://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.com 32 class Person implements Comparable { String name; int age; //使用了泛型类似的 instanceof 就不用再写了 public int compareTo(Person o) { return (this.age - o.age); } } 2.7.42.7.42.7.42.7.4、采用泛型改造 MapMapMapMap import java.util.*; public class GenericTest04 { public static void main(String[] args) { IdCard idCard1 = new IdCard(); idCard1.cardNo = 223243244243243L; Person person1 = new Person(); person1.name = "张三"; IdCard idCard2 = new IdCard(); idCard2.cardNo = 223243244244343L; Person person2 = new Person(); person2.name = "李四"; IdCard idCard3 = new IdCard(); idCard3.cardNo = 223243244243243L; Person person3 = new Person(); person3.name = "张三"; Map map = new HashMap(); map.put(idCard1, person1); map.put(idCard2, person2); map.put(idCard3, person3); //不能编译 //map.put("1001", "王五"); 动力节点 http://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.com 33 for (Iterator> iter=map.entrySet().iterator(); iter.hasNext();) { /* Map.Entry entry = (Map.Entry)iter.next(); IdCard idCard = (IdCard)entry.getKey(); Person person = (Person)entry.getValue(); */ Map.Entry entry = iter.next(); //不能转换 //String s = (String)entry.getKey(); IdCard idCard = entry.getKey(); Person person = entry.getValue(); System.out.println(idCard.cardNo + "," + person.name); } } } class IdCard { long cardNo; //......... public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof IdCard) { IdCard idCard = (IdCard)obj; if (this.cardNo == idCard.cardNo) { return true; } } return false; } public int hashCode() { return new Long(cardNo).hashCode(); } 动力节点 http://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.com 34 } class Person { String name; } 2.7.52.7.52.7.52.7.5、自定义泛型 import java.util.*; public class GenericTest05 { private Object obj; public void setObj(Object obj) { this.obj = obj; } public Object getObj() { return obj; } public static void main(String[] args) { GenericTest05 g = new GenericTest05(); g.setObj("abcd"); //抛出 java.lang.ClassCastException 错误 //因为不知道 Object到底是什么类型 Integer i = (Integer)g.getObj(); } } 【示例代码】,自定泛型 import java.util.*; public class GenericTest06 { private T obj; public void setObj(T obj) { 动力节点 http://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.com 35 this.obj = obj; } public T getObj() { return obj; } public static void main(String[] args) { GenericTest06 g = new GenericTest06(); g.setObj("abcd"); //不能设置 int 类型 //因为使用泛型规定只能设置为 String 类型 //g.setObj(123); //不能转换,因为 String 类型 //Integer i = (Integer)g.getObj(); //使用泛型后不用再进行强制转换了 //它返回的就是真正的类型 String s = g.getObj(); } } 【示例代码】,修改泛型标识 import java.util.*; //泛型的标示符没有限制,只有符合 java的标示符命名规范即可 //最好和 JDK 的泛型标识一样 public class GenericTest07 { private AAA obj; public void setObj(AAA obj) { this.obj = obj; } public AAA getObj() { return obj; } public static void main(String[] args) { 动力节点 http://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.comhttp://www.bjpowernode.com 36 GenericTest07 g = new GenericTest07(); g.setObj("abcd"); String s = g.getObj(); } } 2.82.82.82.8、遗 留类 对比表 、遗 留类 对比表 、遗 留类 对比表 、遗 留类 对比表 遗留类 缺点 取代类 Vector 方法都是同步的影响性能 ArrayList 和LinkedList Hashtable 方法都是同步的影响性能 HashMap Stack 因为 Stack继承了 Vector,同 样影响性能 LinkedList Enumeration 只能与历史集合使用 Iterator
还剩35页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享pdf获得金币 ] 1 人已下载

下载pdf

pdf贡献者

david1008

贡献于2013-01-06

下载需要 3 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf