Java中hashSet和treeSet集合_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java中hashSet和treeSet集合

Java中hashSet和treeSet集合

 2018/10/11 12:24:52  andrew7676  程序员俱乐部  我要评论(0)
  • 摘要:1.Java中hashSet集合HashSet的add()方法返回ture添加成功,返回false添加失败。HashSet是没有顺序的。publicclassSetTest1{publicstaticvoidmain(String[]args){HashSetset=newHashSet();System.out.println(set.add("a"));set.add("b");set.add("c");set.add("d");System.out.println(set.add("a"
  • 标签:has Hash Java
1. Java中hashSet集合
class="java" name="code">
HashSet的add()方法返回ture添加成功,返回false添加失败。HashSet是没有顺序的。
public class SetTest1 {
    public static void main(String[] args){
        HashSet set = new HashSet();
        System.out.println(set.add("a"));
        set.add("b");
        set.add("c");
        set.add("d");
        System.out.println(set.add("a"));
        System.out.println(set);
    }
}
运行结果:
true
false
[d, b, c, a]

set集合不会存储重复的元素,具体是比较两个引用调用hashCode方法得到的结果是否相同!
import java.util.HashSet;
public class SetTest2{
    public static void main(String[] args){
        HashSet set = new HashSet();    
        String s1 = new String("a");
        String s2 = new String("a");
        System.out.println("hash code: " + (s1.hashCode() == s2.hashCode()));
        set.add(s1);
        set.add(s2);
        System.out.println(set);
    }
}
运行结果:
hash code: true
[a]

set集合增加时候的步骤:
1) 当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hashcode值是否与增加的对象的hashcode值一致;
2) 如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去。


2. Java中treeSet集合
Collections的reverseOrder()方法是自然顺序的反序的排序,sort()方法是对指定集合的排序。
Collections的shuffle()方法是随机排序。
Collections的max()和min()方法。

1. 元素自身具备比较性,需要元素实现Comparable接口,重写compareTo方法。叫做元素的自然排序(默认排序)。
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetTest2{
    public static void main(String[] args){
        TreeSet set = new TreeSet(new PersonComparator());
        Person p1 = new Person(10);
        Person p2 = new Person(20);
        Person p3 = new Person(30);
        Person p4 = new Person(40);
        set.add(p1);
        set.add(p2);
        set.add(p3);
        set.add(p4);
        for(Iterator iter = set.iterator(); iter.hasNext();){
            Person p = (Person)iter.next();
            System.out.println(p.score);
        }
    }
}
class Person{
    int score;
    public Person(int score){
        this.score = score;
    }
    public String toString(){
        return String.valueOf(this.score);
    }
}
class PersonComparator implements Comparator{
    public int compare(Object arg0, Object arg1){
        Person p1 = (Person) arg0;
        Person p2 = (Person) arg1;
        return p2.score - p1.score;
    }
}
运行结果:
40
30
20
10

2. 元素自身不具备比较性,或者具备的比较性不是所需要的,需要定义一个类实现接口Comparator,重写compare方法,并将该接口的子类实例对象作为参数传递给TreeMap集合的构造方法。
   当Comparable比较方式和Comparator比较方式同时存在时,以Comparator的比较方式为主。
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetTest3{
    public static void main(String[] args){
        TreeSet set = new TreeSet(new MyComparator());
        set.add("C");
        set.add("A");
        set.add("B");
        set.add("E");
        set.add("a");
        set.add("F");
        set.add("D");
        for(Iterator iter = set.iterator(); iter.hasNext();){
            String value = (String)iter.next();
            System.out.println(value);
        }
    }
}
class MyComparator implements Comparator{
    public int compare(Object arg0, Object arg1){
        String s1 = (String)arg0;
        String s2 = (String)arg1;
        return s2.compareTo(s1);
    }
}
运行结果:
a
F
E
D
C
B
A


推荐博客:https://blog.csdn.net/qq_33642117/article/details/52040345
上一篇: 理解计数排序算法的原理和实现 下一篇: 没有下一篇了!
发表评论
用户名: 匿名