Java编程技术基础.ppt
Java编程技术基础编程技术基础计算机科学与软件工程系计算机科学与软件工程系Java集合框架集合框架集合集合Java系列课程系列课程集合的功能是保存和管理对象。Collection:一组独立的元素,通常这 些元素都服从某种规则。Map:一组成对的“键值对”对象。keyvaluevaluevaluevaluekeyvaluekeyvalueJava集合框架集合框架集合集合Java系列课程系列课程集合能够动态改变。String s=“java”;ArrayList list=new ArrayList();list0 slist.add(s);1 slist.add(s);0 s0 slist.remove(1);Java集合框架集合框架集合的缺陷:未知类型集合的缺陷:未知类型Java系列课程系列课程 容器只保存对Object的引用,Object是所有类的基类,因此容器可以保存任何类型的对象;但是不包括基本类型,因为它们不是真正的对象,没有继承任何东西。产生以下问题:产生以下问题:因为在将对象的引用加入容器时就丢失了类型的信息,所以对于添入容器的对象没有类型限制。因为丢失了类型信息,所以容器只知道它保存的是指 向对象的引用。则在使用容器中的元素前必须要做类 型转换,转换为正确的类型。Java集合框架集合框架集合的缺陷:未知类型集合的缺陷:未知类型Java系列课程系列课程Cat和Dog被放入容器,然后再取出来:public class CatsAndDogs public static void main(String args)List cats=new ArrayList();for(int i=0;i7;i+)cats.add(new Cat(i);cats.add(new Dog(7);for(int i=0;icats.size();i+)(Cat)cats.get(i).id();抛出类型转换异常List catList=new ArrayList();Java集合框架集合框架集合框架集合框架Java系列课程系列课程Java集合框架集合框架Collection接口接口Java系列课程系列课程Java集合框架集合框架Collection接口接口Java系列课程系列课程Java集合框架集合框架List接口接口Java系列课程系列课程List(interface)次序是List最重要的特点;它确保维护元素特 定的顺序。List为Collection添加了许多方法,使得能够向List中间插入和移出元素。ArrayList 由数组实现的List。它允许对元素进行快速随 机访问,但是向List中间插入与移除元素的速 度很慢。LinkedList 对顺序访问进行了优化,向List中间插入与移 除的开销较小,随机访问则相对较慢。具有 addFirstaddFirst()()、addLastaddLast()()、getFirstgetFirst()()、getLastgetLast()()、removeFirstremoveFirst()()、removeLastremoveLast()()等方法,这些方法使 得LinkedList可以当作堆栈、队列使用。Java集合框架集合框架List接口接口Java系列课程系列课程 所有的List中只能容纳单个不同类型的对象组成的表,而不是KeyValue键值对。所有的List中可以有相同的元素。所有的List中可以有null元素。基于Array的List(Vector,ArrayList)适合查询,而 LinkedList(链表)适合添加,删除操作。Java集合框架集合框架ArrayListJava系列课程系列课程Java集合框架集合框架ArrayListJava系列课程系列课程Java集合框架集合框架求图形面积求图形面积Java系列课程系列课程public static String loadConfig()String configs=new String22;String str=null;int i=0;.使用ArrayList来满足图形的动态扩展Java集合框架集合框架求图形面积求图形面积Java系列课程系列课程/config.txt1=com.scujcc.Square2=com.scujcc.Circle对配置文件建模实体:配置文件实体:配置文件实体:配置文件项实体:配置文件项1com.scujcc.Square2com.scujcc.CircleJava集合框架集合框架求图形面积求图形面积Java系列课程系列课程对配置文件建模Java集合框架集合框架求图形面积求图形面积Java系列课程系列课程/config.txt1=com.scujcc.Square2=com.scujcc.Circle对配置文件建模ConfigItem实例1:id=1className=com.scujcc.SquareConfigItem实例2:id=2className=com.scujcc.CircleConfigJava集合框架集合框架求图形面积求图形面积Java系列课程系列课程Java集合框架集合框架求图形面积求图形面积Java系列课程系列课程public class ConfigItem private String id;private String className;public String getId()return id;public void setId(String id)this.id=id;public String getClassName()return className;public void setClassName(String className)this.className=className;Java集合框架集合框架Java系列课程系列课程public class Config private static List configs=null;static configs=new ArrayList();try BufferedReader br=new BufferedReader(new FileReader(new File(D:config.txt);String str=null;ConfigItem configItem=null;while(str=br.readLine()!=null)configItem=new ConfigItem();configItem.setId(str.split(=)0);configItem.setClassName(str.split(=)1);configs.add(configItem);静态程序区初始化配置项集合定义配置项集合将构建好的配置项加入集合针对每一行配置数据,构建与之对应的配置项对象Java集合框架集合框架Java系列课程系列课程 catch(IOException e)e.printStackTrace();public static ConfigItem getConfigItemByID(String id)ConfigItem configItem=null;for(int i=0;iconfigs.size();i+)if(configs.get(i).getId().equals(id)configItem=configs.get(i);break;return configItem;Java集合框架集合框架Java系列课程系列课程public class Graphic public static void main(String args)double area=0;Sharp sharp=null;Scanner scanner=new Scanner(System.in);ConfigItem item=null;try while(scanner.hasNext()item=Config.getConfigItemByID(scanner.next();String className=item.getClassName();sharp=(Sharp)Class.forName(className).newInstance();sharp.setLength(scanner.nextDouble();puteArea();area=sharp.getArea();System.out.println(Area is +area);根据ID从集合中找到配置项对象根据完全限定类名加载类并产生实例Java集合框架集合框架集合的遍历集合的遍历-for循环循环Java系列课程系列课程public ConfigItem getConfigItemByID(String id)ConfigItem configItem=null;for(int i=0;iconfigs.size();i+)if(configs.get(i).getId().equals(id)configItem=configs.get(i);break;return configItem;对集合的遍历/迭代Java集合框架集合框架集合的遍历集合的遍历 -迭代器迭代器Java系列课程系列课程Iterator:迭代器是一个对象,它的工作就是遍历并选择 序列中的对象。获取Iterator:使用方法Iterator()要求容器返回一个 Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。Java集合框架集合框架迭代器迭代器Java系列课程系列课程public class CatsAndDogs private static void main(String args)List cats=new ArrayList();for(int i=0;i7;i+)cats.add(new Cat(i);Iterator e=cats.iterator();while(e.hasNext()System.out.println(e.next();取得一个对象容器,遍 历容器以对每个对象执 行动作。Object.toString()Java集合框架集合框架迭代器方式迭代器方式Java系列课程系列课程public ConfigItem getConfigItemByID(String id)ConfigItem configItem=null;Iterator ite=configs.iterator();while(ite.hasNext()configItem=(ConfigItem)ite.next();if(configItem.getId().equals(id)return configItem;return configItem;Java集合框架集合框架LinkedListJava系列课程系列课程Java集合框架集合框架LinkedListJava系列课程系列课程Java集合框架集合框架LinkedListJava系列课程系列课程使用使用LinkedList模拟栈模拟栈Java系列课程系列课程import java.util.*;public class StackL private LinkedList list=new LinkedList();public void push(Object v)list.addFirst(v);public Object top()return list.getFirst();public Object pop()return list.removeFirst();public static void main(String args)StackL stack=new StackL();for(int i=0;i10;i+)stack.push(new Integer(i);System.out.println(stack.top();System.out.println(stack.top();System.out.println(stack.pop();System.out.println(stack.pop();System.out.println(stack.pop();使用使用LinkedList模拟队列模拟队列Java系列课程系列课程import java.util.*;public class Queue private LinkedList list=new LinkedList();public void put(Object v)list.addFirst(v);public Object get()return list.removeLast();public boolean isEmpty()return list.isEmpty();public static void main(String args)Queue queue=new Queue();for(int i=0;i10;i+)queue.put(Integer.toString(i);while(!queue.isEmpty()System.out.println(queue.get();Java集合框架集合框架Set接口接口Java系列课程系列课程Set(interface)存入Set的每一个元素都必须是唯一的,因为 Set不保存重复元素。加入Set的Object必须定 义equals()方法以确保对象的唯一性。Set与 Collection有完全一样的接口。Set接口不保证 维护元素的次序。HashSet 为快速查找而设计的Set,存入HashSet的对象 必须定义hashCode()。TreeSet 保存次序的Set,底层为树结构。使用它可以 从Set中提取有序的序列。LinkedHashSet 具有HashSet的查询速度,且内部使用链表维(JDK1.4)护元素的顺序(插入的次序)。在用迭代器 遍历时,会按元素插入的次序显示。Java集合框架集合框架HashSetJava系列课程系列课程Java集合框架集合框架HashSetJava系列课程系列课程Java集合框架集合框架HashSetJava系列课程系列课程public class Config private Set configs=null;public Config()configs=new HashSet();Java集合框架集合框架HashSetJava系列课程系列课程public void loadConfig()String str=null;ConfigItem configItem=null;try File configFile=new File(D:SharpConfig.txt);FileReader fr=new FileReader(configFile);BufferedReader br=new BufferedReader(fr);while(str=br.readLine()!=null)configItem=new ConfigItem();configItem.setId(str.split(=)0);configItem.setClassName(str.split(=)1);configs.add(configItem);catch(IOException e)e.printStackTrace();Java集合框架集合框架Map接口接口Java系列课程系列课程Map(interface)维护“键值对”的关联性,以便可以通过键查找 值。HashMap Map基于散列表的实现。TreeMap 基于二叉树的实现。查看“键”或“键值对”时,它们会被排序。Java集合框架集合框架HashMapJava系列课程系列课程键键(key)值值(value)key必须唯一 value可以重复Java集合框架集合框架HashMapJava系列课程系列课程构造HashMapJava集合框架集合框架HashMapJava系列课程系列课程Java集合框架集合框架HashMapJava系列课程系列课程Java集合框架集合框架创建创建HashMapJava系列课程系列课程public class Config private Map configs=null;static configs=new HashMap();Java集合框架集合框架HashMap的使用的使用Java系列课程系列课程 try ./构造输入流while(str=br.readLine()!=null)configItem=new ConfigItem();configItem.setId(str.split(=)0);configItem.setClassName(str.split(=)1);configs.put(str.split(=)0,configItem);catch(IOException e)e.printStackTrace();public static ConfigItem getConfigItemByID(String id)return configs.get(id);Java集合框架集合框架HashMap的遍历的遍历 Java系列课程系列课程键键(key)值值(value)键键(key)首先取得Map容器中的健值集合 遍历键值集合,获取每一个键值 根据键值获取原始Map容器中对应的value值遍历键值集合Java集合框架集合框架HashMap的遍历的遍历 Java系列课程系列课程Java集合框架集合框架HashMap的遍历的遍历 Java系列课程系列课程public ConfigItem getConfigItemByID(int id)ConfigItem configItem=null;int key=-1;Set keySet=configs.keySet();Iterator ite=keySet.iterator();while(ite.hasNext()key=ite.next();if(key=id)return configs.get(key);return configItem;得到键值集合得到与键值集合对应的迭代器遍历迭代器获得Key根据Key获得ValueJava集合框架集合框架HashMap的遍历的遍历 Java系列课程系列课程映射项:key和value之间的映射关系ID1product 1ID2product 2.IDnproduct nID1product 1ID2product 2IDnproduct nJava集合框架集合框架HashMap的遍历的遍历 Java系列课程系列课程java.utilMap.Entry 映射项(键值对)映射项(键值对)ID1product 1productID 1product 1productID 2product 2.productID nproduct nproductID nproductnHashMap映射项集合映射项集合映射项映射项迭代迭代获取获取key值值获取获取value值值Java集合框架集合框架Java系列课程系列课程HashMapHashMap的遍历的遍历 Java集合框架集合框架HashMap的遍历的遍历 Java系列课程系列课程HashMapSetIteratorMap.EntryentrySet()iterator()next()hasNext()KeyValuegetKey()getvalue()Java集合框架集合框架Map.EntryMap.Entry.Map.EntryJava集合框架集合框架HashMap的遍历的遍历 Java系列课程系列课程public ConfigItem getConfigItemByID(int id)ConfigItem configItem=null;Set entries=configs.entrySet();Iterator ite=entries.iterator();Map.Entry entry=null;while(ite.hasNext()entry=(Map.Entry)ite.next();if(entry.getKey()=id)return entry.getValue();return configItem;获得映射项集合得到与映射项集合对应的迭代器获得映射项获得映射项中的value元素有序允许元素重复CollectionList是是SetHashSet否否TreeSet是(二叉树)MapHashMap否使用key-value来映射和存储数据,Key必须惟一,value可以重复TreeMap是(二叉树)Java集合框架集合框架Java系列课程系列课程小结小结Java集合框架集合框架集合框架总结集合框架总结Java系列课程系列课程Java集合框架集合框架求图形面积求图形面积Java系列课程系列课程SharpConfig.txt属性文件属性文件 propertiesclass Properties=class ConfigConfigItemConfigItemJava集合框架集合框架属性文件属性文件Java系列课程系列课程 存储数据的方式key=valueconfig.propertiesJava集合框架集合框架Properties 属性类属性类Java系列课程系列课程Java集合框架集合框架PropertiesJava系列课程系列课程Java集合框架集合框架PropertiesJava系列课程系列课程getPropery(“2”);Java集合框架集合框架PropertiesJava系列课程系列课程public void load(InputStream inStream)throws IOException从输入流中读取属性列表(键和元素对)。configs.load(Config.class.getClassLoader().getResourceAsStream(defaultConfigLocation);Java集合框架集合框架从从classpath中搜索文件中搜索文件Java系列课程系列课程从classpath定位:com/scujcc/config.propertiesJava集合框架集合框架如何才能从如何才能从classpath开始搜索开始搜索Java系列课程系列课程class ClassJava集合框架集合框架如何才能从如何才能从classpath开始搜索开始搜索Java系列课程系列课程class ClassExample:Graphic.class.getClassLoader();Java集合框架集合框架如何才能从如何才能从classpath开始搜索开始搜索Java系列课程系列课程class ClassLoaderGraphic.class.getClassLoader().getResourceAsStream(“com/scujcc/config.properties”)Java集合框架集合框架加载属性文件加载属性文件Java系列课程系列课程private static final String defaultConfigLocation =com/scujcc/config.properties;private static Properties configs;static configs=new Properties();try configs.load(Graphic.class.getClassLoader().getResourceAsStream(defaultConfigLocation);catch(IOException e)e.printStackTrace();public static void main(String args)System.out.println(configs);静态程序区从类路径搜索文件Java集合框架集合框架图形示例程序最终版图形示例程序最终版Java系列课程系列课程public abstract class Sharp private double r;public double getR()return r;public void setR(double r)this.r=r;public abstract double getArea();Java集合框架集合框架Java系列课程系列课程public class Square extends Sharp public double getArea()return getR()*getR();public class Circle extends Sharp public double getArea()return 3.14*getR()*getR();Java集合框架集合框架Java系列课程系列课程public class Graphics private static final String defaultConfigLocation =com/scujcc/config.properties;private static Properties configs;static configs=new Properties();try configs.load(Graphics.class.getClassLoader().getResourceAsStream(defaultConfigLocation);catch(IOException e)e.printStackTrace();Java集合框架集合框架Java系列课程系列课程public static void main(String args)double area=0;Sharp sharp=null;Scanner scanner=new Scanner(System.in);try while(scanner.hasNext()String className=configs.getProperty(scanner.next();sharp=(Sharp)Class.forName(className).newInstance();sharp.setLength(scanner.nextDouble();puteArea();area=sharp.getArea();System.out.println(Area is +area);catch(Exception e)e.printStackTrace();finally scanner.close();Java集合框架集合框架Java系列课程系列课程求图形面积求图形面积 add new Sharppublic class NewSharp extends Sharp public double getArea()return Math.pow(getR(),3);Java集合框架集合框架Java系列课程系列课程求图形面积最终版求图形面积最终版Java1.0/1.1的容器的容器Vector 向量类向量类Java系列课程系列课程 Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创 建 Vector 后进行添加或移除项的操作。Java1.0/1.1的容器的容器Vector 向量类向量类Java系列课程系列课程Java1.0/1.1的容器的容器Vector 向量类向量类Java系列课程系列课程public static void loadConfig()configs=new Vector();String str=null;ConfigItem configItem=null;try BufferedReader br=new BufferedReader(new FileReader(new File(d:SharpConfig.txt);while(str=br.readLine()!=null)configItem=new ConfigItem();configItem.setId(str.split(=)0);configItem.setClassName(str.split(=)1);configs.add(configItem);catch(IOException e)e.printStackTrace();Java1.0/1.1的容器的容器Enumeration 枚举类枚举类Java系列课程系列课程 实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。连续调用 nextElement 方法将返回 一系列的连续元素。Java1.0/1.1的容器的容器Enumeration 枚举类枚举类Java系列课程系列课程public static ConfigItem getConfigItem(String id)ConfigItem configItem=null;Enumeration e=configs.elements();while(e.hasMoreElements()configItem=(ConfigItem)e.nextElement();if(configItem.getId().equals(id)return configItem;return null;Java集合框架集合框架集合框架支持的算法集合框架支持的算法Java系列课程系列课程Collections 是针对集合类的一个工具类。它包含有各种有关 集合操作的静态方法,以实现对各种集合的索、排序、线程安全化等操作。Java集合框架集合框架CollectionsJava系列课程系列课程Java集合框架集合框架Collections ExampleJava系列课程系列课程import java.util.*;public class Example final static int size=6;public static void Test(List l)Collections.shuffle(l);System.out.println(l);int loc=Collections.binarySearch(1,new Integer(3);System.out.println(loc);Collections.sort(l);System.out.println(l);System.out.println(Collections.min(l);System.out.println(Collections.max(l);Java集合框架集合框架Collections ExampleJava系列课程系列课程 public static void main(String args)ArrayList I=new ArrayList(size);for(int i=0;isize;i+)l.add(new Integer(i);Test(l);4,0,1,5,3,240,1,2,3,4,505Java集合框架集合框架下次课内容下次课内容Java系列课程系列课程 Java访问数据库