Java集合继承关系

**

Java集合继承关系

**
一、集合继承关系框图

Java集合继承关系_第1张图片
二、常用接口及实现类

  • (1)Iteraor接口(无序集合–HashSet,HashMap)

      方法: boolean hasNext()   
            E next()
            void remove()
    
      子接口:LinkedIterator (有序--List)    
      额外方法:add()
               previous()
               hasPrevious()
    

    Iterator和Iterable的区别:

    1). Iterator是迭代器接口,只要实现该接口就可以使用foreach进行迭代.
    2). Iterable中封装了Iterator接口,只要实现了Iterable接口的类,就可以使用Iterator迭代器。
    3). 集合Collection、List、Set都是Iterable的实现类,所以他们及其他们的子类都可以使用foreach进行迭代。
    4). Iterator中和核心的方法next(),hasnext(),remove(),都是依赖当前位置,如果这些集合直接实现Iterator,则必须包括当前迭代位置的指针。当集合在方法间进行传递的时候,由于当前位置不可知,所以next()之后的值,也不可知。而当实现Iterable则不然,每次调用都返回一个从头开始的迭代器,各个迭代器之间互不影响。

  • (2)Collection 接口
    Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。集合中存储的都是对象的引用(地址)。Java集合继承关系_第2张图片

    List:可以存放重复的内容

    Set:不能存放重复的内容,所以的重复内容靠hashCode()和equals()两个方法区分

    Queue:队列接口

    SortedSet  可以对集合中的数据进行排序

  • List 接口: 按照元素插入的顺序进行存放,元素可以重复。
    实现List的子类的特点:

    ArrayList   底层数组实现,线程不安全,查询速度快

    Vector  线程安全,但速度慢,已被ArrayList替代

    LinkedList  底层链表实现,链表结果,增删速度快,没有同步方法

    Stack(已经不用,可由LinkedList代替)

  • Set接口Set中的对象元素不能重复,Set最多有一个null元素
    实现Set的子类的特点:

    HashSet 能快速定位一个元素,放到HashSet中的对象需要实现,底层数据结构又hashmap的键来实现。不保证集合中元素的顺序,即不能保证迭代的顺序与插入的顺序一致。是线程不安全的。 hashCode()方法,它使用了前面说过的哈希码的算法。

    TreeSet 将放入其中的元素按序存放,要求放入其中的对象是可排序的,有序的存放,线程不安全,可以对Set集合中的元素进行排序,由红黑树来实现排序,TreeSet实际上也是SortedSet接口的子类,其在方法中实现了SortedSet的所有方法,并使用comparator()方法进行排序。
    LinkedHashSet 底层由链表实现,按照元素插入的顺序进行迭代,即迭代输出的顺序与插入的顺序保持一致

  • SortedSet接口(实现了Set接口):Set接口的输出接口

    public Comparator //返回排序有关联的比较器

    public E first() //返回集合中的第一个元素

    public SortedSet headSet(E toElement) //返回从开始到指定元素的集合

    public E last()//返回最后一个元素

    public SortedSet subSet(E fromElement,E toElement) //返回指定对象间的元素

    public SortedSet tailSet(E fromElement)//从指定元素到最后

-(3)Map接口
Map容器中的键对象不允许重复,任何作为key的对象都必须实现 hashCode和equals方法。
实现Map接口的子类:

Hashtable:Hashtable继承Dictionary类,实现了Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value。是同步的。

HashMap:HashMap和Hashtable类似,不同之处在于HashMap是非同步的,并且允许null,即null value和null key。

但是将HashMap视为Collection时(values()方法可返回Collection),其迭代子操作时间开销和HashMap的容量成比例。因此,如果迭代操作的性能相当重要的话,不要将HashMap的初始化容量设得过高,或者load factor过低。

WeakHashMap:WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。

LinkedHashMap:是HashMap的一个子类,如果需要输出的顺序和输入的相同,那么用LinkedHashMap可以实现.Key和Value都允许空;Key重复会覆盖、Value允许重复;非线程安全;有序。

TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

Collections和Collection有什么区别?

Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。

Collection有两个常用的子接口:

——List:对元素都有定义索引。有序的。可以重复元素。

——Set:不可以重复元素。无序。

Arrays:用于对数组操作的工具类,工具类中的方法都是静态的

Collections是集合框架中的一个工具类。 该类中的方法都是静态的。提供的方法中有可以对list集合进行排序,二分查找等方法。通常常用的集合都是线程不安全的。因为要提高效率。如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。

Comparable和Comparator的区别
Comparable
Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较,则依赖compareTo方法的实现,compareTo方法也被称为自然比较方法。如果开发者add进入一个Collection的对象想要Collections的sort方法帮你自动进行排序的话,那么这个对象必须实现Comparable接口。compareTo方法的返回值是int,有三种情况:
1、比较者大于被比较者(也就是compareTo方法里面的对象),那么返回正整数
2、比较者等于被比较者,那么返回0
3、比较者小于被比较者,那么返回负整数

Comparator
Comparator可以认为是是一个外比较器,个人认为有两种情况可以使用实现Comparator接口的方式:
1、一个对象不支持自己和自己比较(没有实现Comparable接口),但是又想对两个对象进行比较
2、一个对象实现了Comparable接口,但是开发者认为compareTo方法中的比较方式并不是自己想要的那种比较方式
Comparator接口里面有一个compare方法,方法有两个参数T o1和T o2,是泛型的表示方式,分别表示待比较的两个对象,方法返回值和Comparable接口一样是int,有三种情况:
1、o1大于o2,返回正整数
2、o1等于o2,返回0
3、o1小于o3,返回负整数

你可能感兴趣的:(Java基础知识)