黑马程序员---集合(Set)学习笔记

集合(Set)学习笔记

(一)Set:无序(存入与取出是无序的),不可重复。HashSet:底层是哈希表。HashSet通过元素的hashCode()和equals()方法来保证元素的唯一性,如果hashCode相同才会调用equals方法。即先判断哈希值,若相等则调用equals方法在判断。线程非同步。

(二)TreeSet:可以对Set集合中的元素进行排序。

package cn.cx.collection.study;

import java.util.*;

publicclass SetDemo {

    publicstaticvoid main(String[] args) {

        TreeSet ts = new TreeSet();

        ts.add(new Person(1,"zhansan"));

        ts.add(new Person(6,"lisi"));

        ts.add(new Person(3,"wanwu"));

        ts.add(new Person(2,"chenxin"));

        Iterator i = ts.iterator();

        while(i.hasNext()) {

            Person p = (Person)i.next();

            System.out.println(p.toString());

        }

    }

===============person类必须实现Comparable接口==============

package cn.cx.collection.study;

publicclass Person implements Comparable {

    intid;

    String name;

    public Person(int id, String name) {

        super();

        this.id = id;

        this.name = name;

    }

    public String toString() {

        return"Person [id=" + id + ", name=" + name + "]";

    }

    publicint compareTo(Object o) {

        if(!(o instanceof Person)) {

            thrownew RuntimeException("Not Person");

        }

        Person p = (Person)o;

        if(this.id>p.id)

            return 1;

        if(this.id==p.id)

            returnthis.name.compareTo(p.name);//当主要条件相同时判断次要条件

        return -1;

    }

}

(三)TreeSet底层数据结构为二叉树。保证元素唯一性的依据是compareTo方法返回 0

(四)TreeSet的第二种排序方式:当元素自身不具备比较性,或者具备的比较性不是所需要的,这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式。通过构造方法把自定义的比较器传进去。

package cn.cx.collection.study;

import java.util.*;

publicclass TreeSetDemo02 {

    publicstaticvoid main(String[] args) {

        TreeSet ts = new TreeSet(new MyCompare());

        ts.add(new Person(1,"zhansan"));

        ts.add(new Person(6,"lisi"));

        ts.add(new Person(3,"wanwu"));

        ts.add(new Person(2,"chenxin"));

        System.out.println(ts);

    }

 

}

class MyCompare implements Comparator {

    publicint compare(Object o1, Object o2) {

        Person p1 = (Person)o1;

        Person p2 = (Person)o2;

        return p1.name.compareTo(p2.name);

    }

(五)练习:按字符串长度排序

package cn.cx.collection.study;

import java.util.Comparator;

import java.util.TreeSet;

publicclass TreeSetDemo01 {

    publicstaticvoid main(String[] args) {

        TreeSet<String> ts = new TreeSet<String>(new MyCompare0());

        ts.add("alll");

        ts.add("agsf");

        ts.add("bba");

        ts.add("amjjjjj");

        ts.add("awwww");

        ts.add("abb");

        System.out.println(ts);

    }

}

class MyCompare0 implements Comparator<String> {

 

    publicint compare(String s1, String s2) {

        if(s1.length()>s2.length()) {

            return 1;

        }

        if(s1.length()==s2.length()) {

            return s1.compareTo(s2);

        }

        return -1;

    }

(六)泛型“< >”用来接收类型。将元素类型传到里面;当类中要操作的引用数据类型不确定的时候,早期定义Object来完成扩展,现在定义泛型。

package cn.cx.collection.study;

import java.util.*;

publicclass GenericDemo {

    publicstaticvoid main(String[] args) {

        ArrayList<String> al1 = new ArrayList<String>();

        al1.add("haha");

        al1.add("hahe");

        al1.add("hae");

        al1.add("hah\\a");

        ArrayList<Integer> al2 = new ArrayList<Integer>();

        al2.add(1);

        al2.add(4);

        al2.add(5);

        al2.add(0);

        printCollec(al1);

        printCollec(al2);

    }

    publicstaticvoid printCollec(ArrayList<?> al) {  //”?”为通配符,匹配任何类型。

        Iterator<?> i = al.iterator();

        while(i.hasNext()) {

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

        }

    }

(七)泛型限定:ArrayList<? extends Person> 集合里放Person及其子类,上限;   ArrayList<? super E> 接收E类型或其父类,下限;   “?”通配符,占位符。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值