java数据结构(二)——Set(HashSet,TreeSet),泛型,Map(HashMap,TreeMap)

•Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复
Set集合的功能和Collection是一致的

概念

  1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key
  2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.
  3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
    a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.
    b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象 才可以真正定位到键值对应的Entry.
    c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value
  4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.
    a. Comparator可以在创建TreeMap时指定
    b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.
    TreeMap是使用Tree数据结构实现的,所以使用compare接口就可以完成定位了.

    5.HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null
    6.Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
    7.Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
    8.TreeSet可以对Set集合中的元素进行排序,让元素自身具备比较性,元素需要实现Comparable 接口,覆盖compareTo方法,这种也称为元素的自然顺序!

泛型

泛型类

class Utils<T> {

    private T t;

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }
}

泛型方法

class Demo<T> {
    public void show(T t) {
        System.out.println("show:" + t);
    }

    public void print(T t) {
        System.out.println("print:" + t);
    }
}

泛型类定义的泛型,在整个类中有效,如果被方面使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。

•为了让不同的方法可以操作不同的类型,而且类型不确定,那么可以将泛型定义在方法上

class Demo {
    public <T> void show(T t) {

    }
    public <T>void print(T t){

    }
}

静态泛型方法
这个倒不是什么大知识点,就是注意一下,泛型方法不能使用静态的,也可以说静态方法不可以访问类上定义的泛型,如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上,就可以了

class Demo<T> {
    public <T> void show(T t) {

    }

    public <T> void print(T t) {

    }

    public static <T> void method(T t) {

    }
}

泛型接口

//公共的   类   类名
public class HelloJJAVA {
    public static void main(String[] args) {
        InterImpl<Integer> i = new InterImpl<Integer>();
        i.show(55);
    }
}

class InterImpl<T> implements Inter<T> {

    @Override
    public void show(T t) {
        System.out.println("show:" + t);
    }

}

interface Inter<T> {
    void show(T t);
}

泛型限定
•?叫通配符,也可以理解为占位符

◦泛型的限定 ? extends E:E类型和E的子类型。这叫上限
◦? super E:可以接受E类型和E的父类,这叫下限

 Iterator<?> iterator = als.iterator();
 Iterator<? extends Person> iterator = als.iterator();

Map

泛型< k,v> 键值对,映射关系

基本特点

•该集合存储键值对,是一对一对往里存,而且要保证键的唯一性

◦1.添加

■put(key ,values)
■putAll()
◦2.删除

■clear()
■remove(object key)
◦3.判断

■containsValue(Object value)
■containsKey(Object key)
■isEmpty()
◦4.获取

■get(Object key)
■size()
■values()
■entrySet()
■keySet()

Map有三个子类

•Hashtable

◦底层是哈希表数据结构,不可以存入null值或者键,该集合是线程同步的

•HashMap

◦底层是哈希表数据结构,允许使用null的键值对,线程是不同步的。效率高

•TreeMap

◦底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序
Map和Set很像,其实Set底层就是使用了Map集合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值