现在的位置: 首页 > 综合 > 正文

java小案例(1)

2014年09月05日 ⁄ 综合 ⁄ 共 5201字 ⁄ 字号 评论关闭

一、大家都知道当执行一个方法时,如果中途有return会提前结束方法。思考下面的一段代码会返回什么样的结果?

第一种情况:

public static String methodA(){
       try{
           System.out.println("try methodA");
           return "A";
       }finally{
           System.out.println("run finally");
       }
    }
    public static void main(String[] args) {
        System.out.println(methodA());;
    }

Result:

try methodA
run finally
A

第二种情况:

public static String methodB(){
        System.out.println("methodB");
        return "B";
    }
    public static String methodA(){
       try{
           System.out.println("try methodA");
           return methodB();
       }finally{
           System.out.println("run finally");
       }
    }
    public static void main(String[] args) {
        System.out.println(methodA());;
    }

Result:

try methodA
methodB
run finally
B

结果一目了然,不做具体分析。

二、关于Map与hashcode

Map<K,V>,通常情况下,K定义为:String ,Long,通过key值可以取到关联的value值

但如果K定义为一个对象如Person呢,那是怎么个情况。。。下面有三个例子,可以让你一目了解

第一种情况:

package com.alibaba.model;

/**
 * 类Person.java的实现描述:TODO 类实现描述
 * 
 * @author onlyone 2012-6-17 下午04:19:49
 */
public class Person {

    private String name;
    private String age;
    private String address;

    public Person(String name, String age, String address){
        super();
        this.name = name;
        this.age = age;
        this.address = address;
    }

   get/set方法。。。

    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null) return false;
        if (getClass() != obj.getClass()) return false;
        Person other = (Person) obj;
        if (name != other.getName()) return false;
        return true;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "name=" + name + ";age=" + age + ";address=" + address;
    }

}

 public static void main(String[] args) {

        Map<Person, String> map = new HashMap<Person, String>();
        Person p1 = new Person("a1", "a2", "a3");
        System.out.println("p1 hashcode:"+p1.hashCode());
        map.put(p1, "有结果");
        Person p2 = new Person("a1", "a2", "a3");
        System.out.println("p2 hashcode:"+p2.hashCode());
        System.out.println(map.get(p2));
    }

结果:

p1 hashcode:12677476
p2 hashcode:33263331
null

第二种情况:

package com.alibaba.model;

/**
 * 类Person.java的实现描述:TODO 类实现描述
 * 
 * @author onlyone 2012-6-17 下午04:19:49
 */
public class Person {

    private String name;
    private String age;
    private String address;

    public Person(String name, String age, String address){
        super();
        this.name = name;
        this.age = age;
        this.address = address;
    }
get/set方法。。。

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null) return false;
        if (getClass() != obj.getClass()) return false;
        Person other = (Person) obj;
        if (name != other.getName()) return false;
        return true;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "name=" + name + ";age=" + age + ";address=" + address;
    }

}
public static void main(String[] args) {

        Map<Person, String> map = new HashMap<Person, String>();
        Person p1 = new Person("a1", "a2", "a3");
        System.out.println("p1 hashcode:"+p1.hashCode());
        map.put(p1, "有结果");
        Person p2 = new Person("a1", "b2", "b3");
        System.out.println("p2 hashcode:"+p2.hashCode());
        System.out.println(map.get(p2));
    }

结果:

p1 hashcode:3087
p2 hashcode:3087
有结果

第三种情况:

package com.alibaba.model;

/**
 * 类Person.java的实现描述:TODO 类实现描述
 * 
 * @author onlyone 2012-6-17 下午04:19:49
 */
public class Person {

    private String name;
    private String age;
    private String address;

    public Person(String name, String age, String address){
        super();
        this.name = name;
        this.age = age;
        this.address = address;
    }
get/set方法。。
    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + ((age == null) ? 0 : age.hashCode());
        return result;
    }

    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null) return false;
        if (getClass() != obj.getClass()) return false;
        Person other = (Person) obj;
        if (name != other.getName()) return false;
        return true;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "name=" + name + ";age=" + age + ";address=" + address;
    }

}

 public static void main(String[] args) {

        Map<Person, String> map = new HashMap<Person, String>();
        Person p1 = new Person("a1", "a2", "a3");
        System.out.println("p1 hashcode:"+p1.hashCode());
        map.put(p1, "有结果");
        Person p2 = new Person("a1", "b2", "b3");
        System.out.println("p2 hashcode:"+p2.hashCode());
        System.out.println(map.get(p2));
    }

结果:

p1 hashcode:98754
p2 hashcode:98785
null

三、关于借助Comparable接口,快速对List集合按某种规则排序

例子:

定义一个Person对象,其中两个属性name(不可重复)、index(可重复),按index的大小,对List集合中的Person元素排序

Person类:

package com.alibaba.test1;

/**
 * 类Person.java的实现描述:TODO 类实现描述
 * 
 * @author onlyone 2013-4-3 下午10:24:06
 */
public class Person implements Comparable<Person> {

    private String name;
    private int    index;

    public Person(){
    }

    public Person(String name, int index){
        super();
        this.name = name;
        this.index = index;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    @Override
    public int compareTo(Person o) {
        if (o == null) {
            return 0;
        }
        int ret = 0;
        if (this.index < o.getIndex()) {
            ret = 1;
        } else if (this.index > o.getIndex()) {
            ret = -1;
        } else {
            ret = 0;
        }
        return ret;
    }

    @Override
    public String toString() {
        return "name=" + name + ";index=" + index;
    }

}

Test测试类:

package com.alibaba.test1;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 根据index索引排序
 * @author onlyone 2013-4-3 下午10:39:14
 */
public class Test {

    public static void main(String[] args) {

        Person p1 = new Person("a1", 3);
        Person p2 = new Person("a2", 0);
        Person p3 = new Person("a3", 0);
        Person p4 = new Person("a4", 2);
        Person p5 = new Person("a5", 1);
        List<Person> list = new ArrayList<Person>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        list.add(p5);
        Collections.sort(list);
        for (Person p : list) {
            System.out.println(p);
        }

    }

}

结果:

name=a1;index=3
name=a4;index=2
name=a5;index=1
name=a2;index=0
name=a3;index=0

抱歉!评论已关闭.