• 201871010108-高文利《面向对象程序设计(java)》第十二周学习总结


     

    项目

    内容

    这个作业属于哪个课程

    <任课教师博客主页链接>

    https://www.cnblogs.com/nwnu-daizh/

    这个作业的要求在哪里

    <作业链接地址>

    https://www.cnblogs.com/nwnu-daizh/p/11867214.html

    作业学习目标

    (1) 掌握Vetor、Stack、Hashtable三个类的用途及常用API;

    (2)  掌握ArrayList、LinkList两个类的用途及常用API;

    (3) 了解java集合框架体系组成;

    (4) 掌握Java GUI中框架创建及属性设置中常用类的API;

    (5) 了解Java GUI中2D图形绘制常用类的API;

    第一部分:总结第九章、第十章理论知识(40分)

    第九章:

    1.集合是一种包含多个元素 并提供对所包含元素操作方法的类,其包含的元 素可以由同一类型的对象组成,也可以由不同类 型的对象组成。 

    2.集合框架:JAVA集合类库的统一架构。

    框架就是一个类库,框架中包含一些通用接口和超类,实现这些接口或创建这些超类的子类就可方便的设计程序所需的类。

    集合类的作用: Java的集合类提供了一些基本数据结构的支持。 例Vector、Hashtable、Stack等。

    集合类的使用: Java的集合类包含在java.util包中。

    集合类的特点:

    1. 只容纳对象。 注意:数组可以容纳基本数据类型数据和对象。 如果集合类中想使用基本数据类型,又想利用 集合类的灵活性,可以把基本数据类型数据封 装成该数据类型的包装器对象,然后放入集合 中处理。

    2. 集合类容纳的对象都是Object类的实例,一旦 把一个对象置入集合类中,它的类信息将丢失 ,这样设计的目的是为了集合类的通用性。 因为Object类是所有类的祖先,所以可以在这 些集合中存放任何类的对象而不受限制,但切 记在使用集合成员之前必须对它重新造型。

    Vector类:

      Vector类类似长度可变的数组。

      Vector中只能存放对象。

      Vector的元素通过下标进行访问。

      Vector类关键属性: capacity表示集合多能容纳的元素个数。 capacityIncrement表示每次增加多少容量。 size表示集合当前元素个数。

    Stack类:Stack类是Vector的子类。FILO 

    Hashtable类:
      Hashtable通过键来查找元素。
      Hashtable用散列码(hashcode)来确定键。所 有对象都有一个散列码,可以通过Object类的 hashCode()方法获得。

      Math.random()方法的随机性。   

    集合框架中的基本接口:
      Collection:集合层次中的根接口,JDK未提供这个 接口的直接实现类。

      Set:不能包含重复的元素。对象可能不是按存放的 次序存放,也就是说不能像数组一样按索引的方式进 行访问,SortedSet是一个按照升序排列元素的Set。

      List:是一个有序的集合,可以包含重复的元素。提 供了按索引访问的方式。 Map:包含了key-value对。Map不能包含重复的key 。

      SortedMap是一个按照升序排列key的Map。

       List:
      List的明显特征是它的元素 都有一个确定的顺序。

      LinkedList中的元素在内存 中是以链表方式存储的。 List的明显特征是它的元素 都有一个确定的顺序。

      实现它的类有ArrayList和 LinkedList。

        ArrayList中的元素在内存中 是顺序存储的。

        LinkedList中的元素在内存 中是以链表方式存储的。

    ArrayList和linkedList :
     ArrayList:可以将其看作是能够自动增长容量的数组。利用ArrayList的toArray()返回一个数组。
     Arrays.asList()返回一个列表。
     LinkedList是采用双向循环链表实现的。
     利用LinkedList实现栈(stack)、队列(queue)、双向队列(double-ended queue )。
     ArrayList底层采用数组完成,而LinkedList则是以一般的 双向链表(double-linked list)完成,其内每个对象除了数据 本身外,还有两个引用,分别指向前一个元素和后一个元 素。
     如果经常在 List 中进行插入和删除操作,应该使用LinkedList,否则,使用ArrayList将更加快速。

    Set:
     Set中的元素必须唯一。
     添加到Set中的对象元素必须定义equals方法,以提供算法来判断欲添加进来的对象是否与已经存在的某对象相等,从而建立对象的唯一性。
     实 现 Set 接口的类有HashSet,TreeSet

    HashSet与TreeSet:

     TreeSet是一个有序集合,TreeSet中元素将按照升序排列,缺省是按照自然顺序进行排列,意味着TreeSet中元素要实现Comparable接口。
     可以在构造 TreeSet 对象时,传递实现了Comparator接口的比较器对象。
     HashSet是基于Hash算法实现的,其性能通常都优于TreeSet。通常使用HashSet,需要排序的功能时,使用TreeSet。

    Map:
     映射(map)是一个存储关键字和值的关联或关键字/值对的对象。给定一个关键字,可以得到它的值。关键字和值都是对象。关键字必须是唯一的。但值是 可以被复制的。
     Map接口映射唯一关键字到值。关键字(key)是以 后用于检索值的对象。给定一个关键字和一个值,可 以存储这个值到一个Map对象中。当这个值被存储以 后,就可以使用它的关键字来检索它
     Map循环使用两个基本操作:get( )和put( )。使用put( )方法可以将一个指定了关键字和值的值加入映 射。为了得到值,可以通过将关键字作为参数来调用get( )方法。调用返回该值。

    第十章:

    Java的抽象窗口工具箱包含在java.awt包中,它提供了许 多用来设计GUI的组件类和容器类。

    AWT库处理用户界面元素的方法:把图形元素的创 建和行为委托给本地GUI工具箱进行处理。

    Swing:

      Swing用户界面库是非基于对等体的GUI工具箱。

      Swing具有更丰富并且更方便的用户界面元素集合。

      Swing类库被放在javax.swing包里。

      大部分AWT组件都有其Swing的等价组件。

      Swing组件的名字一般是在AWT组件名前面添加一个字母“J”,如:JButton,JFrame,JPanel等。

    组件:构成图形用户界面的元素,拿来即用图形表示(能在屏幕上显示,能和用户进行交互) 

    通常把由Component类的子类或间接子类创建的 对象称为一个组件。

    容器:容器是Java中能容纳和排列组件的组件。

    常用的容器是框架(Frame,JFrame) 

    添加组件:

      Container类提供了一个方法add(),用来在容器类 组件对象中添加其他组件。 

      容器本身也是一个组件,可以把一个容器添加到 另一个容器里,实现容器嵌套。

    框架的创建:

    创建空框架
       在Java中,常采用框架(Frame)创建初始界面,即GUI的顶层窗口. AWT库中有一个基于对等体的Frame类。
    .  该类的Swing版本为JFrame,JFrame是Frame子类。
    定位:
      常用Component类的setLocation和setBounds方法常用属性
      Title:框架标题
      IconImage:框架图标

    java.awt.Component 1.0
      boolean isVisible() 检查组件是否可见  

      void setVisible(boolean b) 设置组件可见  

       void setSize(int width,int height) 把组件缩放到指定宽度和高度   

      void setBounds(int x,int y,intwidth,int height) 移动并缩放组件

       Dimension getSize() 得到组件的大小
      void setSize(Dimension d) 把组件缩放到指定的大小

    2D图形:

      Java SE了包含一个Java 2D库,该库提供了一个非常强大的图形操作集。
       Graphics 2D 类是Graphics 类的子类, Graphics2D类对象通常可用Graphics对象转换而来。

    颜色

    Graphics2D类的setPaint方法(Graphics类为setColor方法)用来设置颜色。
    例:g2.setPaint(Color.RED);g2.drawString(“Set Color”,100,100);
    (1)Color类中定义的13种标准颜色
    BLACK、BLUE、CYAN、DARK_GRAY、GRAY、GREEN、
    LIGHT_GRAY、MAGENTA、ORANGE、PINK、RED、
    WHITE、YELLOW
    6,字体的使用:

    (1)AWT中定义的五种逻辑字体名
     SanaSerif
     Serif
     Monospaced
     Dialog
     DialogInput
    这些逻辑字体在不同语言和操作系统上映射为不同
    的物理字体。

    (2)字体风格
     Font.PLAIN
     Font.BOLD
     Fond.ITALIC
     Fond.BOLD + Font.ITALIC
    (3)设置字体
     Font serif=new Font(“Serif”,Font.BOLD,14);
     g2.setFont(serif);

     

    第二部分:实验部分

    实验1:测试程序1(6分)

    使用JDK命令运行编辑、运行以下三个示例程序,结合运行结果理解程序;

    掌握VetorStackHashtable三个类的用途及常用API

    //示例程序1
    import java.util.Vector;
    class Cat {
    	 private int catNumber;
    	 Cat(int i) {
    		catNumber = i;
    	}
    	 void print() {
    		System.out.println("Cat #" + catNumber);
    	 }
    }
    public class Cats{
    public static void main(String[] args){
           Vector<Cat> cats= new Vector<Cat>();
           for(int i=0; i<7; i++)
               cats.addElement(new Cat(i)); 
           for(int i=0; i<cats.size(); i++)
             (cats.elementAt(i)).print();
       }
    }
    

     

     

    //示例程序2
    import java.util.*;
    public class Stacks
    {
       static String[] months={"金","银","铜","铁"};
       public static void main(String[] args){
          Stack<String> stk = new Stack<String> ();
          for(int i=0; i<months.length; i++)
              stk.push(months[i]);
          System.out.println(stk);
          System.out.println("element 2=" + stk.elementAt(2));
          while(!stk.empty())
              System.out.println(stk.pop());
      }
    }
    

     

    //示例程序3
    import java.util.*;
    class Counter {
    	int i = 1;
    	public String toString() {
    		return Integer.toString(i);
    	}
    }
    
    public class Statistics {
    	public static void main(String[] args) {
    		Hashtable ht = new Hashtable();
    		for (int i = 0; i < 10000; i++) {//生成10000个随机数
    			Integer r = new Integer((int) (Math.random() * 20));
        if(ht.containsKey(r))//确定 Hashtable 是否包含特定键。
                  ((Counter)ht.get(r)).i++;//计算key的hash值,匹配直到找到相对应key的value,若没有找到返回null
              else     ht.put(r, new Counter());
    }	
    		System.out.println(ht);
    	}
    }
    

     小结:

    Vector类:类似长度可变的数组;只能存放对象;通过下标进行访问。

     关键属性: capacity表示集合多能容纳的元素个数。 capacityIncrement表示每次增加多少容量。 size表示集合当前元素个数。

    Stack类:Vector的子类。特点:FILO 

    Hashtable类:通过键来查找元素。用散列码(hashcode)来确定键。所 有对象都有一个散列码,可以通过Object类的 hashCode()方法获得。

      Math.random()方法的随机性。get、put 方法的使用。

    实验1:测试程序2(6分)

     使用JDK命令编辑运行ArrayListDemoLinkedListDemo两个程序,结合程序运行结果理解程序;

    import java.util.*;
    
    public class ArrayListDemo {
    	public static void main(String[] argv) {
    		ArrayList al = new ArrayList();
    		// Add lots of elements to the ArrayList...
    		al.add(new Integer(11));//添加元素
    		al.add(new Integer(12));
    		al.add(new Integer(13));
    		al.add(new String("hello"));
    		// First print them out using a for loop.
    		System.out.println("Retrieving by index:");
    		for (int i = 0; i < al.size(); i++) {
    			System.out.println("Element " + i + " = " + al.get(i));
    		}
    	 }
    }
    

      

    import java.util.*;
    public class LinkedListDemo {
        public static void main(String[] argv) {
            LinkedList l = new LinkedList();
            l.add(new Object());
            l.add("Hello");
            l.add("zhangsan");
            ListIterator li = l.listIterator(0);
            while (li.hasNext())//存在可访问的元素
                System.out.println(li.next());//返回将要访问的下一个元素
            if (l.indexOf("Hello") < 0)  //返回第一次出现的指定子字符串在此字符串中的索引 
                System.err.println("Lookup does not work");
            else
                System.err.println("Lookup works");
       }
    }
    

      

    Elipse环境下编辑运行调试教材360页程序9-1,结合程序运行结果理解程序;

     掌握ArrayListLinkList两个类的用途及常用API

    package linkedList;
    
    import java.util.*;
    
    /**
     * This program demonstrates operations on linked lists.
     * @version 1.12 2018-04-10
     * @author Cay Horstmann
     */
    public class LinkedListTest
    {
       public static void main(String[] args)
       {
          var a = new LinkedList<String>();//创建链表
          a.add("Amy");
          a.add("Carl");
          a.add("Erica");
    
          var b = new LinkedList<String>();
          b.add("Bob");
          b.add("Doug");
          b.add("Frances");
          b.add("Gloria");
    
          // 把b中的元素合并到a中
    
          ListIterator<String> aIter = a.listIterator();
          Iterator<String> bIter = b.iterator();
    
          while (bIter.hasNext())
          {
             if (aIter.hasNext()) aIter.next();
             aIter.add(bIter.next());
          }
    
          System.out.println(a);
    
          // remove every second word from b
    
          bIter = b.iterator();
          while (bIter.hasNext())
          {
             bIter.next(); // skip one element
             if (bIter.hasNext())
             {
                bIter.next(); //返回下一个要访问的元素
                bIter.remove(); // 移出元素
             }
          }
    
          System.out.println(b);
    
    
          a.removeAll(b);//删除a中删除b中存在的所有元素
    
          System.out.println(a);
       }
    }
    

      

     

    实验2:测试程序1(6分)

    运行下列程序,观察程序运行结果。

    import javax.swing.*;
    public class SimpleFrameTest
    {
       public static void main(String[] args)
       {
         JFrame  frame = new JFrame(); 
         frame.setBounds(0, 0,300, 200);//移动并重新设置组件大小
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//用户关闭这个框架时的响应动作
         frame.setVisible(true); //获取或设置Visible属性   ,组件可见
       }
    }
    

     

     

    elipse IDE中调试运行教材407页程序10-1,结合程序运行结果理解程序;与上面程序对比,思考异同;

     掌握空框架创建方法;

    了解主线程与事件分派线程概念;

    掌握GUI顶层窗口创建技术。

    package simpleFrame;
    
    import java.awt.*;
    import javax.swing.*;
    
    /**
     * @version 1.34 2018-04-10
     * @author Cay Horstmann
     */
    public class SimpleFrameTest
    {
       public static void main(String[] args)
       {
          EventQueue.invokeLater(() ->
             {
                var frame = new SimpleFrame();
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
             });
       }
    }
    
    class SimpleFrame extends JFrame
    {
       private static final int DEFAULT_WIDTH = 300;
       private static final int DEFAULT_HEIGHT = 200;
    
       public SimpleFrame()
       {
          setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);//使用给定的宽度和高度,重新设置组件大小
       }
    }
    

      

     

    实验2:测试程序2(6分)

    elipse IDE中调试运行教材412页程序10-2,结合运行结果理解程序;

     掌握确定框架常用属性的设置方法。

    package sizedFrame;
    
    import java.awt.*;
    import javax.swing.*;
    
    /**
     * @version 1.35 2018-04-10
     * @author Cay Horstmann
     */
    public class SizedFrameTest
    {
       public static void main(String[] args)
       {
          EventQueue.invokeLater(() ->
             {
                var frame = new SizedFrame();
                frame.setTitle("SizedFrame");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
             });
       }
    }
    
    class SizedFrame extends JFrame
    {
       public SizedFrame()
       {
          // get screen dimensions
    
          Toolkit kit = Toolkit.getDefaultToolkit();//调用Toolkit类的静态方法getDefaultToolkit得到一个Toolkit对象
          Dimension screenSize = kit.getScreenSize();//调用getScreenSize方法,以Dimension对象形式返回屏幕大小
          int screenHeight = screenSize.height;//屏幕高度
          int screenWidth = screenSize.width;//屏幕宽度
    
          // set frame width, height and let platform pick screen location
    
          setSize(screenWidth / 2, screenHeight / 2);//框架大小定义为取值的50%
          setLocationByPlatform(true);//告知窗口系统定位框架
    
          // set frame icon
    
          Image img = new ImageIcon("icon.gif").getImage();
          setIconImage(img); //图像设置为框架图标     
       }
    }
    

      

    实验2:测试程序3(6分)

    elipse IDE中调试运行教材418页程序10-3,结合运行结果理解程序;

    掌握在框架中添加组件;

    掌握自定义组件的用法。

    package notHelloWorld;
    
    import javax.swing.*;
    import java.awt.*;
    
    /**
     * @version 1.34 2018-04-10
     * @author Cay Horstmann
     */
    public class NotHelloWorld
    {
       public static void main(String[] args)
       {
          EventQueue.invokeLater(() ->
             {
                var frame = new NotHelloWorldFrame();
                frame.setTitle("NotHelloWorld");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);
             });
       }
    }
    
    /**
     * A frame that contains a message panel.
     */
    class NotHelloWorldFrame extends JFrame
    {
       public NotHelloWorldFrame()
       {
          add(new NotHelloWorldComponent());//将给定组件添加到该框架的内容窗格中
          pack();//调整窗口大小,考虑其组件的首选大小
       }
    }
    
    /**
     * A component that displays a message.
     */
    class NotHelloWorldComponent extends JComponent
    {
       public static final int MESSAGE_X = 75;
       public static final int MESSAGE_Y = 100;
    
       private static final int DEFAULT_WIDTH = 300;
       private static final int DEFAULT_HEIGHT = 200;
    
       public void paintComponent(Graphics g)//覆盖这个方法描述一个如何绘制自己的组件
       {
          g.drawString("Not a Hello, World program", MESSAGE_X, MESSAGE_Y);
       }
    
       public Dimension getPreferredSize() //覆盖这个方法,返回这个组件的首选大小
       {  
          return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); 
       }
    }
    

      

     实验总结:(19分)本周学习了第九、十章的内容。第九章主要学习了Vector类、Stack类、Hashtable类等遗留类的知识与API。ArrayList和linkedList的添加元素等方法的应用。第十章图像程序设计主要学习了添加组件与框架的创建。通过运行程序,并分析程序结果,理解代码相关知识以及API的使用。虽然有些代码刚开始有些不能理解,但通过不断的尝试与问同学,慢慢的理解相应代码。

  • 相关阅读:
    Centos7安装docker-ce
    postgresql-11主从复制(流复制)部署
    centos7安装postgreSql11
    CentOS7下安装PostgreSQL12
    postgres生成uuid
    软工第一次团队展示
    软工第一次结对编程作业
    软工第一次个人编程作业
    课程总结
    团队作业
  • 原文地址:https://www.cnblogs.com/gwlg/p/11869318.html
Copyright © 2020-2023  润新知