Java lesson17 homework

package lesson17;

/**1. 创建自定义类Triangle包含如下属性:

最小夹角 a(整型、单位度)

最大夹角 b(整型、单位度)

编写构造方法包含两个参数(夹角),并根据参数计算最小夹角和最大夹角赋值给a和b

使用HashSet存储Triangle,并且该HashSet不能存储相似三角形

即:HashSet<Triangle> set = new HashSet<Triangle>();

1)     重写hashCode方法,该方法返回夹角a的值

2)     重写equals方法,进一步判断另外一个夹角b是否一致,如果一致为相似三角形。

 

 

 *

 * @author LENOVO

 *

 */

import java.util.HashSet;

import java.util.Iterator;

 

public class HashAngle {

       HashSet<Triangle> hset=new HashSet<Triangle>();

       public void hashTriangle(){

                     hset.add(new Triangle(30,50));

                     hset.add(new Triangle(40,80));

                     hset.add(new Triangle(40,80));

                     hset.add(new Triangle(80,40));

                     Iterator iterator=hset.iterator();

                     while(iterator.hasNext()){

                     System.out.println("a="+iterator.next()+"b="+iterator.next());

                     }

       }

       public static void main(String[] args) {

              HashAngle hangle=new HashAngle();

              hangle.hashTriangle();

       }

 

 

}package lesson17;

/**1. 创建自定义类Triangle包含如下属性:

最小夹角 a(整型、单位度)

最大夹角 b(整型、单位度)

编写构造方法包含两个参数(夹角),并根据参数计算最小夹角和最大夹角赋值给a和b

使用HashSet存储Triangle,并且该HashSet不能存储相似三角形

即:HashSet<Triangle> set = new HashSet<Triangle>();

1)     重写hashCode方法,该方法返回夹角a的值

2)     重写equals方法,进一步判断另外一个夹角b是否一致,如果一致为相似三角形。

 

2. 给Triangle增加如下属性:

边长 x

边长 y

边长 z

尝试数学上的其他相似三角形定义来重写hashCode和equals方法,以达到判断三角形是否相似的目的。

 

 

 

 *

 * @author LENOVO

 *

 */

 

public class Triangle {

       int a;

       int b;

      

       }

       //重写构造方法。。

       public Triangle(int a,int b){

              if(a>b){

                            this.a=a-b;

              }

              else {this.a=b-a;}

              this.b=a+b;

             

      

       }

       /* (non-Javadoc)

        * @see java.lang.Object#hashCode()

        */

       @Override

       public int hashCode() {

              // TODO Auto-generated method stub

              return a;

       }

       /* (non-Javadoc)

        * @see java.lang.Object#equals(java.lang.Object)

        */

       @Override

       public boolean equals(Object obj) {

              if(obj==null){

                     return false;

              }

              if(obj==this){

                     return true;

              }

              if(obj instanceof Triangle){

                     Triangle anobj=(Triangle) obj;

                     if(anobj.b==this.b){

                            return true;

                     }

              }

              return false;

       }

       /* (non-Javadoc)

        * @see java.lang.Object#toString()

        */

       @Override

       public String toString() {

              return "Triangle [a=" + a + ", b=" + b + "]";

       }

       /**

        * @return the a

        */

       public int getA() {

              return a;

       }

       /**

        * @param a the a to set

        */

       public void setA(int a) {

              this.a = a;

       }

       /**

        * @return the b

        */

       public int getB() {

              return b;

       }

       /**

        * @param b the b to set

        */

       public void setB(int b) {

              this.b = b;

       }

      

 

}

2package lesson17;

/**1. 创建自定义类Triangle包含如下属性:

最小夹角 a(整型、单位度)

最大夹角 b(整型、单位度)

编写构造方法包含两个参数(夹角),并根据参数计算最小夹角和最大夹角赋值给a和b

使用HashSet存储Triangle,并且该HashSet不能存储相似三角形

即:HashSet<Triangle> set = new HashSet<Triangle>();

1)     重写hashCode方法,该方法返回夹角a的值

2)     重写equals方法,进一步判断另外一个夹角b是否一致,如果一致为相似三角形。

 

2. 给Triangle增加如下属性:

边长 x

边长 y

边长 z

尝试数学上的其他相似三角形定义来重写hashCode和equals方法,以达到判断三角形是否相似的目的。

 

 

 

 *

 * @author LENOVO

 *

 */

 

public class Triangle {

       double a;

       double b;

       double c;

       double x;

       double y;

       double z;

       public Triangle(double x, double y, double z) {

              super();

              this.a = x/y;

              this.b = y/z;

           this.c = z/x;

       }

       /*//重写构造方法。。

       public Triangle(int a,int b){

              if(a>b){

                            this.a=a-b;

              }

              else {this.a=b-a;}

              this.b=a+b;

             

      

       }*/

       /* (non-Javadoc)

        * @see java.lang.Object#hashCode()

        */

       @Override

       public int hashCode() {

              // TODO Auto-generated method stub

              return (int) a;

       }

       /* (non-Javadoc)

        * @see java.lang.Object#equals(java.lang.Object)

        */

       @Override

       public boolean equals(Object obj) {

              if(obj==null){

                     return false;

              }

              if(obj==this){

                     return true;

              }

              if(obj instanceof Triangle){

                     Triangle anobj=(Triangle) obj;

                     if(anobj.b==this.b&&anobj.c==this.c){

                            return true;

                     }

              }

              return false;

       }

       /* (non-Javadoc)

        * @see java.lang.Object#toString()

        */

       @Override

       public String toString() {

              return "Triangle [x=" + x + ", y=" + y + ", z=" + z + "]";

       }

       /**

        * @return the a

        */

       public double getA() {

              return a;

       }

       /**

        * @param a the a to set

        */

       public void setA(int a) {

              this.a = a;

       }

       /**

        * @return the b

        */

       public double getB() {

              return b;

       }

       /**

        * @param b the b to set

        */

       public void setB(int b) {

              this.b = b;

       }

       /**

        * @return the x

        */

       public double getX() {

              return x;

       }

       /**

        * @param x the x to set

        */

       public void setX(double x) {

              this.x = x;

       }

       /**

        * @return the y

        */

       public double getY() {

              return y;

       }

       /**

        * @param y the y to set

        */

       public void setY(double y) {

              this.y = y;

       }

       /**

        * @return the z

        */

       public double getZ() {

              return z;

       }

       /**

        * @param z the z to set

        */

       public void setZ(double z) {

              this.z = z;

       }

       /**

        * @return the c

        */

       public double getC() {

              return c;

       }

       /**

        * @param c the c to set

        */

       public void setC(double c) {

              this.c = c;

       }

      

 

}

package lesson17;

/**1. 创建自定义类Triangle包含如下属性:

最小夹角 a(整型、单位度)

最大夹角 b(整型、单位度)

编写构造方法包含两个参数(夹角),并根据参数计算最小夹角和最大夹角赋值给a和b

使用HashSet存储Triangle,并且该HashSet不能存储相似三角形

即:HashSet<Triangle> set = new HashSet<Triangle>();

1)     重写hashCode方法,该方法返回夹角a的值

2)     重写equals方法,进一步判断另外一个夹角b是否一致,如果一致为相似三角形。

 

 

 *

 * @author LENOVO

 *

 */

import java.util.HashSet;

import java.util.Iterator;

 

public class HashAngle {

       HashSet<Triangle> hset=new HashSet<Triangle>();

       public void hashTriangle(){

                     hset.add(new Triangle(3,5,6));

                     hset.add(new Triangle(4,8,6));

                     hset.add(new Triangle(4,8,6));

                     hset.add(new Triangle(8,4,6));

                     Iterator iterator=hset.iterator();

                     while(iterator.hasNext()){

                     System.out.println(iterator.next()+" ");

                     }

       }

       public static void main(String[] args) {

              HashAngle hangle=new HashAngle();

              hangle.hashTriangle();

       }

 

 

}package lesson17;

/**

 * 1. 创建自定义类水果,要求包含水果名称、单价、产地等属性

使用HashSet存储水果,并提供equals方法和hashCode方法使用水果的名称属性判定水果是否相同,使用迭代器输出

 

 

 * @author LENOVO

 *

 */

public class Fruit {

       String name;

       double price;

       String home;

      

       public Fruit(String name, double price, String home) {

              super();

              this.name = name;

              this.price = price;

              this.home = home;

       }

       /**

        * @return the name

        */

       public String getName() {

              return name;

       }

       /**

        * @param name the name to set

        */

       public void setName(String name) {

              this.name = name;

       }

       /**

        * @return the price

        */

       public double getPrice() {

              return price;

       }

       /**

        * @param price the price to set

        */

       public void setPrice(double price) {

              this.price = price;

       }

       /**

        * @return the home

        */

       public String getHome() {

              return home;

       }

       /**

        * @param home the home to set

        */

       public void setHome(String home) {

              this.home = home;

       }

       /* (non-Javadoc)

        * @see java.lang.Object#toString()

        */

       @Override

       public String toString() {

              return "Fruit [name=" + name + ", price=" + price + ", home=" + home + "]";

       }

       /* (non-Javadoc)

        * @see java.lang.Object#hashCode()

        */

       @Override

       public int hashCode() {

              // TODO Auto-generated method stub

              return name.hashCode();

       }

       /* (non-Javadoc)

        * @see java.lang.Object#equals(java.lang.Object)

        */

       @Override

       public boolean equals(Object obj) {

              if(obj==null){

                     return false;

              }

              if(obj==this){

                     return true;

              }

              if(obj instanceof Fruit){

                     Fruit anobj=(Fruit) obj;

                     if(anobj.name.equals(this.getName())){

                            return true;

                     }

              }

              return super.equals(obj);

       }

      

}

package lesson17;

 

import java.util.HashSet;

import java.util.Iterator;

 

public class Main {

       HashSet<Fruit> hSet=new HashSet<Fruit>();

       public void main(){

              hSet.add(new Fruit("苹果",2.5,"河南"));

              hSet.add(new Fruit("苹果",3,"河南"));

              hSet.add(new Fruit("橘子",5,"淮北"));

              hSet.add(new Fruit("梨",6,"沈阳"));

              Iterator iterator=hSet.iterator();

              while(iterator.hasNext()){

                     System.out.println(iterator.next());

              }

       }

       public static void main(String[]args){

              Main m=new Main();

              m.main();

       }

 

}

2. 简要说明Set和List在使用上有什么区别?

1>Set不保存重复的元素,List可以保存重复的元素。

2>Set输出时不按输入时的顺序输出,List按照输入时的顺序输出;。

3. 看课件学习TreeSet,向TreeSet中存储自定义类,会出现什么问题,如何解决?

当我们使用TreeSet存储自定义类时,需要在自定义类中重写compareTo方法,以提供比对形式,否则在TreeSet不能对用户自定义的类型进行正确的树状排序。

 

4. 简要说明TreeSet和HashSet的区别?

TreeSet是一个有序集合,其元素按照升序排列,默认是按照自然顺序排列,而HashSet 的顺序是按调用HashCode()方法,通过一定的比较来排列的顺序。

TreeSet虽然是有序的,但是并没有具体的索引,当插入一个新的数据元素的时候,TreeSet中原有的数据元素可能需要重新排序,所以TreeSet插入和删除数据元素的效率较低。

 

posted @ 2017-08-09 14:39  木&子  阅读(453)  评论(0编辑  收藏  举报