1、1集合框架 Java 平台提供了一个全新的集合框架。 “集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。它们都封装在 java.util 包中核心接口 Java 集合框架的核心接口有两种:Collection(聚集)和 Map(映射) Collection 接口是一组允许重复的对象。 Set 中的数据对象没有顺序且不可以重复。接口 List 中的数据对象有顺序且可以重复。接口 Map 接口是一组成对的键值对象,即所持有的是 key-value pairs。Map 中不能有重复的 key。拥有自己的内部排列机制。不能有重复的键Collection 类 java.util
2、.Collections 提供了一些静态方法实现了基于 List 容器的一些常用算法 void sort(List l) 对 List 容器内的元素排序 void shuffle(List l) 对 List 容器内的对象进行随机排列 void reverse(List l) 对 List 容器内的对象进行逆续排列 void fill(List l, Object o) 用一个特定的对象重写整个 List 容器 void copy(List dest,List src) 将 src List 容器内容拷贝到 dest List 容器 int binarySearch(List l, Objec
3、t o) 对于顺序的 List 容器,采用折半查找的方法查找特定对象2例题:List l1 = new LinkedList();List l2 = new LinkedList();for(int i=0; i stack=new LinkedList();/* 把对象存入 LinkedList的第一个位置*/public void push(Object o)stack.addFirst(o);/* param args* 把第一个位置的对象进行删除*/public Object pop()return stack.removeFirst();/* 取得LinkedList的第一个元素*/
4、public Object peek()return stack.getFirst();public static void main(String args) MyStack m=new MyStack();m.push(“wangwu“);m.push(“zhangsan“);m.push(“lisi“);System.out.println(“现在箩筐顶部的元素是: “+m.peek();m.pop();5System.out.println(“现在箩筐顶部的元素是: “+m.peek();ArrayList 类 import java.util.ArrayList;public cla
5、ss TestArrayList /* List接口的第二个实现类,按照先进先出*/public static void main(String args) ArrayList list=new ArrayList();list.add(“a“);list.add(“b“);list.add(“c“);for (int i=0;i list=new ArrayList();Student s=new Student(“张三“,1000000, “中国“);/把张三这个对象存入ArryList 中list.add(s);/ s.setName(“李四“);System.out.println(l
6、ist.get(0).name); ArrayList类封装了一个动态再分配的Object数组。 集合框架中保存的都是对象的引用, 不是对象的备份。这一点尤其重要111111111111111111111111111News类import java.util.Date;public class News private int id;private String title;private String creater;private Date date;public News(int id,String title,String creater,Date date)7this.id=id;t
7、his.title=title;this.creater=creater;this.date=date;public int getId() return id;public void setId(int id) this.id = id;public String getTitle() return title;public void setTitle(String title) this.title = title;public String getCreater() return creater;public void setCreater(String creater) this.cr
8、eater = creater;public Date getDate() return date;public void setDate(Date date) this.date = date;22222222222222222222222222import java.util.ArrayList;import java.util.Date;public class TestNews /* param args*/public static void main(String args) News new1=new News(1,“car“,“管理员“,new Date();News new2
9、=new News(2,“newz“,“管理员“,new Date();ArrayList list=new ArrayList(); /list.add(new1);list.add(new2);System.out.println(list.size();8for(int i=0;i list=new ArrayList();list.add(“1“);list.add(“2“);list.add(“3“);list.add(“4“);String value=“;System.out.println(list.size();for(int i=0;i list=new ArrayList
10、();list.add(“3“);list.add(“3“);list.add(“3“);list.add(“4“);String value=“;Iterator it=list.iterator(); /对容器 list 的内容进行遍历while(it.hasNext() /游标在第一个元素的左边,判断下一个元素是否存在10value=it.next();if(“3“.equals(value)it.remove();for(int i=0;i set=new HashSet();set.add(“1“);set.add(“2“);set.add(“3“);for(Iterator ite
11、r=set.iterator();iter.hasNext();)System.out.println(iter.next();Set接口Set 接口继承 Collection 接口,它不允许集合中存在重复项, 而且它不象List按照加入列表的顺序存储元素,它有自己的排列法则。 Set 接口是Collection的子接口,Set接口没有提供额外的方法,但实现 Set 接口的容器类中的元素是没有有顺序的,而且不可以重复11 Set 容器可以与数学中“集合”的概念相对应 J2SDK API中 所提供的 Set 容器类有 HashSet,TreeSet 等import java.util.HashS
12、et;import java.util.Iterator;public class TestSet1 public static void main(String args) HashSet set=new HashSet();set.add(“1“);set.add(“2“);set.add(“3“);for(Iterator iter=set.iterator();iter.hasNext();)System.out.println(iter.next();HashSet 类 用 HashSet 过滤自定义类。一般认为如果学号一致,就应该是同一个人。本例的过滤规则就是同学号的学生将保留一个
13、。1211111111111111111111111111111111111111Student 类import java.util.HashSet;import java.util.Iterator;class Studentprivate String num;private String name;Student(String num,String name)this.num=num;13this.name=name;public String getNum() return num;public void setNum(String num) this.num = num;public
14、 String getName() return name;public void setName(String name) this.name = name;public String toString() return “学号是“+num+“姓名是“+name;public int hashCode() return this.getNum().hashCode();public boolean equals(Object obj) Student stu=(Student) obj;if(this.getNum()=stu.getNum()return true;return false
15、;public class TestStudent public static void main(String args) HashSet set=new HashSet();Student s1=new Student(“13“,“李四“);Student s2=new Student(“12“,“张三“);Student s3=new Student(“12“,“w“);Student s4=new Student(“11“,“f“);set.add(s1);set.add(s2);set.add(s3);set.add(s4);/问题 1:如何打印出来就是姓名+学号这种形式呢?/问题
16、2:set 中存储的对象如果 hashCode 一致,就认为是一个对象/只要对象学号的 hasCode 一致,set 进行自动过滤14/iter.next()进行对象实例化时,会自动调用类中隐藏的方法for(Iterator iter=set.iterator();iter.hasNext();)System.out.println(iter.next();LinkedHashSet 的用法LinkedHashSet 是 HashSet 的子类,用法和 HashSet 一致。 import java.util.Iterator;import java.util.LinkedHashSet;pu
17、blic class LinkedHashSetTest /* 存储有序对象先进先出*/public static void main(String args) LinkedHashSet set=new LinkedHashSet();set.add(“1“);set.add(“2“);set.add(“3“);set.add(“4“);for(Iterator iter=set.iterator();iter.hasNext();)System.out.println(iter.next();Map 接口 Map 接口不是 Collection 接口的继承。Map 接口用于维护键/值对(k
18、ey/value pairs)。该接口描述了从不重复的键到值的映射。15 实现 Map 接口的类用来存储键值 对。 Map 接口的实现类有 HashMap(查找速度最快)和 TreeMap 等,HashMap 通过hashcode 对其内容进行快速查找,而 TreeMap 中所有的元素都保持着某种固定的顺序 。 Map 类中存储的键值对通过键来标识,所以键值不能重复Map 接口方法Object put(Object key, Object value);Object get(Object key);Object remove(Object key);boolean containsKey(Ob
19、ject key);boolean containsValue(Object value); 第一步,确定存储方式 1、Map 接口用于维护“键-值对”的关联性,可以通过键查找值2、HashMap 是 Map 接口的一个具体实现类 16import java.util.HashMap;import java.util.Iterator;public class MapTest /* param args*/public static void main(String args) HashMap map=new HashMap();map.put(“001“,“aaaaaaaaaa“);map.
20、put(“002“,“bbbbbbbbbbbb“);map.put(“003“,“cccccccccccccc“);System.out.println(map.get(“001“);/先把 HashMap 转换成 Set 接口,再通过接口的相应方法遍历for(Iterator iter=map.keySet().iterator();iter.hasNext();)String key=(String)iter.next();System.out.println(key+“+map.get(key);/如果说 map 里面包含 001 的键值if(map.containsKey(“001“)
21、System.out.println(“有此键值“);elseSystem.out.println(“无此键值“);package i;import java.util.HashMap;import java.util.Iterator;public class Student private String name;private String className;public Student(String name,String className)this.name=name;this.className=className;17public String getName() retur
22、n name;public void setName(String name) this.name = name;public String getClassName() return className;public void setClassName(String className) this.className = className;public String toString() / TODO Auto-generated method stubreturn this.className;public static void main(String arge)Student s1=
23、new Student(“rose“,“c1“);Student s2=new Student(“jack“,“c2“);HashMap hm=new HashMap();hm.put(s1, “rose“);hm.put(s2, “jack“);for(Iterator iter=hm.keySet().iterator();iter.hasNext();)Student s=(Student)iter.next();System.out.println(s+“+hm.get(s);package j;import i.Student;import java.util.HashMap;imp
24、ort java.util.Iterator;import java.util.Map;class Book 18private String title;public Book(String title)this.title=title;public String getTitle() return title;public void setTitle(String title) this.title = title;public String toString() / TODO Auto-generated method stubreturn this.getTitle();public
25、class BookTestpublic static void main(String argc) Book book1=new Book(“呼啸山庄“);Book book2=new Book(“简爱“);Map hs=new HashMap();hs.put(“001“, book1);hs.put(“002“, book2);for(Iterator iter=hs.keySet().iterator();iter.hasNext();)String b=(String)iter.next();System.out.println(b+“+hs.get(b);总结: Java 的集合框架分别派生自 Collection 和 Map 接口。 Collection 有两个常用子接口 List 和 Set,分别表示有序可重复,无序不可重复的集合。 19