常用Collection和Map的继承机构图

  1、常用Collection继承结构图及说明:

1.1 哈希表/散列表数据结构

  一、关于Collection常用方法:

  (
    新建Collection:
    Collection co1 = new ArrayList();// 多态
    Collection co2 = new LinkedList();// 多态
    Collection co3 = new Vector();// 多态
  )
  1. boolean add(E e) :                                         向集合中添加元素  
  2. boolean addAll(Collection<? extends E> c) :               将指定集合中的所有元素添加到这个集合(可选操作)。  
  3. void clear() :                                            从这个集合中移除所有的元素(可选操作)。  
  4. boolean contains(Object o) :                              返回 true如果集合包含指定元素。底层调用的equals()方法。因此存储在集合中的对象,都要重写equals()方法,否则为内存地址的比较。  
  5. boolean containsAll(Collection<?> c) :                    返回 true如果这个集合包含指定集合的所有元素。  
  6. boolean equals(Object o) :                                将指定的对象与此集合进行比较,以进行相等性。  
  7. int hashCode() :                                          返回此集合的哈希代码值。  
  8. boolean isEmpty() :                                       返回 true如果集合不包含任何元素。  
  9. Iterator<E> iterator() :                                  迭代器。迭代器的remove()方法在删除时不会动内存中的集合,集合自带的remove()会实时删除内存中的集合,需要实时更新迭代器才可以。推荐使用迭代器删除  
  10. default Stream<E> parallelStream() :                     返回一个可能并行 Stream与集合的来源。  
  11. boolean remove(Object o) :                               从这个集合中移除指定元素的一个实例,如果它是存在的(可选操作)。存储在集合中的对象,都要重写equals()方法,否则为内存地址的比较。  
  12. boolean removeAll(Collection<?> c) :                     删除此集合中包含的所有元素(可选操作)的所有元素(可选操作)。  
  13. default boolean removeIf(Predicate<? super E> filter) :  删除满足给定谓词的这个集合的所有元素。  
  14. boolean retainAll(Collection<?> c) :                     仅保留包含在指定集合中的这个集合中的元素(可选操作)。  
  15. int size() :                                             返回此集合中的元素的数目。 
  
  二、List常用方法:

  (
    List除了继承了Collection中的方法外,还有一些自己的方法,如get(index)、add(index,Object)。List初始化时预估大小,防止频繁扩容降低效率。
    新建List:
    List co1 = new ArrayList(50);// 默认ArrayList初始化为10,每次扩容添加1.5倍
    List co2 = new LinkedList();// 多态
    List co3 = new Vector();// 默认LinkedList初始化为10,每次扩容添加2倍
  )            
  1.add(int index, E element)                                   在列表中指定的位置上插入指定的元素
  2.get(int index)                                              返回此列表中指定位置的元素。 
  
  三、Set常用方法     

  (
    Set除了继承了Collection中的方法外,还有一些自己的方法,如 。
    新建Set,默认初始化容量16,加载因子为0.75:
    Set st1 = new HashSet();// HashSet底层实际上是使用了HashMap中key的原理,无序不重复。哈希表/散列表,是数组和LinkedList优点的集合,其本质是个数组,但其中每个元素是一个个链表,类似于字典查询,判断增删查效率都很高。
                            // 因为在添加元素时会调用HashCode方法生成数组下标,然后调用equals方法判断是否重复,所以在往HashSet中添加实体类的时候,需要重写HashCode和equals方法,否则对比的是两个内存地址。
    SortedSet st2 = new TreeSet()// 无序不可重复,但是存进去的元素可以按照大小自动排序(数值、时间、字符串均可以,因为存储的元素实现了comparable接口)
  )  
  1.hashCode()                                                返回此组的哈希代码值。

 应用实例:

 public static void main(String[] args) {
    Collection co = new ArrayList();// 多态
    // List有自己的私有方法,如get(index)、add(index,Object),如果有需要使用到这些方法,应该直接创建List对象。使用时注意初始化大小,避免频繁扩容
    // List ls = new ArrayList();
    // List ls = new LinkedList();//list的多态
    co.add(1);
    co.add(new Integer(100));
    Object o = new Object();
    co.add(o);
    Customer cus = new Customer("Make", 34);
    co.add(cus);// 存储单值,会自动调用toString方法
    System.out.println(co.size());
    System.out.println(co.isEmpty());
    Object[] objs = co.toArray();
    for (Object obj : objs) {
        System.out.println("obj>>" + obj);
    }

    // 迭代、遍历,获取迭代器对象。不需要关心底层集合的具体类型,所有集合依赖的迭代器都实现了java.util.Iterator接口
    Iterator it = co.iterator();// 迭代器是面向接口编程,it是引用,保存了内存地址,指向堆中的“迭代器对象”
    // while写法
    while (it.hasNext()) {
        // it.next()将迭代器向下移动一位,并去除指向的元素,初始时it不指向元素,调用next()时指向第一个元素,调用next()之前,必须调用hasNext()
        System.out.print("itItem>>" + it.next() + "; ");
    }
    System.out.println();
    // for写法
    for (Iterator it2 = co.iterator(); it2.hasNext();) {
        Object element = it2.next();
        System.out.print("element>>>" + element + "; ");
    }
    System.out.println();
    co.clear();
    System.out.println(co.size());
    System.out.println(co.isEmpty());
}

static class Customer {
    String name;
    int age;
    Customer(String name, int age) {
        this.age = age;
        this.name = name;
    }
    // 重写toString()
    public String toString() {
        return "Customer[name = " + name + ", age = " + age + "]";
    }
    // equals(E)方法。
        // contains(o)比较:自己创建的对象,对比两个内容相同对象,
        // 对象没重写equals(o)方法则对比的是对象的内存地址,结果不会返回true。
        // 而集合对象内部的比较已经重新了equals方法
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o instanceof Customer) {
            Customer c = (Customer)o;
            if (c.age == this.age && c.name.equals(this.name)) {
                return true;
            }
        }
        return false;
    }
}

2、常用Map继承结构图及说明:

posted @ 2020-10-30 11:02  池非鱼  阅读(299)  评论(0)    收藏  举报