Set

Set集合存储唯一无序的数据

public class SetTest {
    /**
     * Set:
     * 01.存贮的是唯一,无序的数据
     * 02.hashSet是常用的实现类
     * 03.存放的是对象的引用
     *   HashSet底层是hashMap实现的!
     *    01.hashSet在添加一个数据的时候,其实是把这个值当成hashMap的key来进行保存的!
     *    02.hashMap地城是通过初始化一个Entry数组来实现key,value保存数据的!
     *    03.hashMap中的Entry有四个属性变量!  key value next hash
     *    04.在hashMap中添加数据的步骤
     *       001.对key的hashCode进行hash运算,得到的值就是对应的index
     *       002.判断index所指向的数组元素是否为空,如果为空,直接插入数据
     *       003.如果不为空,依次查询entry中的next所指定的元素,
     *           判断key是否相等,如果相等,直接覆盖
     *       004.如果key不相等,通过next变量将值插入Entry数组中
* 04.如果a.equals(b)返回的是true,那么a和b的hashCode一定相等
   * 05.如果a.equals(b)返回的是false,那么a和b的hashCode有可能相等
*/ public static void main(String[] args) { Set set = new HashSet(); set.add("1"); set.add(new String("1")); System.out.println(set.size()); // 1 } }

Set集合测试类

public class SetTest {
    public static void main(String[] args) {
        /*
         * Set接口存储的是唯一(不能重复),无序(新增,删除,查询)对象的集合!
         * HashSet是Set常用的实现类
         * Set存放的是对象的引用
         */
        //创建一个Set集合
        Set s=new HashSet();
        //给集合赋值
        s.add("");    //空串
        s.add(null);  //空值
        s.add(new String("abc"));
        System.out.println(s.size());  // 3
        
        Set set=new HashSet();
        set.add(new News(1, "新闻1"));
        set.add(new News(2, "新闻2"));
        set.add(new News(3, "新闻3"));
        System.out.println(set.size()); //3
        for (Object object : set) {
            System.out.println(object);
        }
    
        Set set1=new HashSet();
        set1.add(new String("abc"));
        set1.add(new String("abc"));
        set1.add(new String("abc"));
        System.out.println(set1.size()); //1
        
        String  a ="abc";
        String  b =new String("abc");
        String  c =new String("abc");
        System.out.println(a==b);  //false
        System.out.println(c==b); //false
        //具有相同内容的String对象,hashCode是一致的!
        System.out.println(b.hashCode()==c.hashCode());  //T
        
        String str1="a";
        String str2=new String("a");
        System.out.println(str1==str2); //false  内存地址不一样
        System.out.println(str1.equals(str2)); //true  内容一样
        System.out.println(str1.hashCode()==str2.hashCode()); //T
    }
}

TreeSet集合

public class TreeTest {
    public static void main(String[] args) {
        /*
         * 1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key
         * 2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.
         * 3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
         * 4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.
         */
        Set set1=new HashSet();
        set1.add("z");
        set1.add("a");
        set1.add("y");
        set1.add("b");
        for (Object object : set1) {
            System.out.println(object);
        }
        
        System.out.println("*******************");
        TreeSet set2=new TreeSet();  //自动排序
        set2.add("z");
        set2.add("a");
        set2.add("y");
        set2.add("b");
        for (Object object : set2) {
            System.out.println(object);
        }
    }
}

 

posted on 2017-05-10 10:52    阅读(343)  评论(0编辑  收藏  举报