代码改变世界

Java 集合的基本用法

2016-12-13 19:55  甘雨路  阅读(274)  评论(0编辑  收藏  举报
package jaxpsax;

import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;

import org.junit.Test;

public class Testf {
    @Test
    public void testSet() {
        // 创建集合
        Set set = new HashSet<>();
        //添加不同的对象
        set.add(23);
        set.add(23);
        set.add(new String("cc"));
        set.add(new String("cc"));
        set.add("cc");
        set.add(new Person("lf", 20));
        set.add(new Person("lf", 20));
        //遍历
        for (Object object : set) {
            System.out.println(object);
        }
        //删除对象
        set.remove(23);
        //使用迭代器遍历
        Iterator it = set.iterator();
        while (it.hasNext()) {
            Object object = (Object) it.next();
            System.out.println(object);
        }
        
        
        
    }
    
    @Test
    public void testCompare() {
        
        /*// 指定排序方法
        Set<Person> set = new TreeSet<>(new Comparator<Object>() {

            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof Person && o2 instanceof Person) {
                    Person p1 =(Person)o1;
                    Person p2 =(Person)o2;
                    return (p1.getName().hashCode()-p2.getName().hashCode()*(p1.getAge()-p2.getAge()));
                }
                return 0;
            }
        });*/
        //创建TreeSet  注意:如果Person类没有实现compareTo会出现类冲突异常
        Set<Person> set = new TreeSet<Person>();
        // 添加数据
        set.add(new Person("lt", 1));
        set.add(new Person("lt", 65));
        set.add(new Person("lh", 65));
        set.add(new Person("ff", 3));
        System.out.println(set);
        
    }
    
    
}
package jaxpsax;

public class Person implements Comparable{
    //属性
    private String name;
    private int age;
    // set和get方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    // 无参构造方法
    public Person() {
        this(null, 0);
    }
    // 有参构造方法
    public Person(String name,int age) {
//        this.name = name;
//        this.age = age;
        setName(name);
        setAge(age);
    }
    
    // 私有的方法
    public void learnSomething() {
        System.out.println("每个人都具有学习能力");
    }
    
    // 重写toString方法
    @Override
    public String toString() {
        return "name:"+name+" "+"age:"+age;
    }
    
    // 重写equals方法
    @Override
    public boolean equals(Object obj) {
        // 判断是否为空
        if (obj == null){
            return false;
        }
        // 判断是否是同一对象应用
        if (this == obj){
            return true;
        }
        // 判断是否是该类的一个实例
        if (!(obj instanceof Person)) {
            return false;
        }
        Person p = (Person)obj;
        //比较内容是否相等
        return p.name.equals(name)&&p.age==age;
    }
    // 重写hashCode方法(注意hashCode和equals方法中所用的属性必须一致)
    @Override
    public int hashCode() {
        return name.hashCode()-age;
    }
    
    //实现compareTo方法
    @Override
    public int compareTo(Object o) {
        
        return name.hashCode()-age;
    }
    
    
}