集合继承结构总结

集合的继承机构详解

Iterable

  • "可迭代的"即“可遍历的”,Collection接口的父接口;

Collection

  • 集合,接口的一种,Iterable的子类,它包括了对集合的基本操作:对集合的增,删,改,查,判断集合是否为空,获取集合大小(注意,此处不是指集合的容量),遍历等等。

  • 常用方法:

    • 在集合中增加元素:add()

    • 删除某个元素:remove();//底层重写equals方法

    • 清空集合中所有元素:clear();

    • 判断集合是否为空:isEmpty();

    • 返回集合大小:size();

    • 判断集合中是否包含某个元素:contains(s);//返回值为true,底层重写了equals方法

List

  • Collection的子类,属于接口,其中的元素有序可重复。

  • 常用方法:

    • 继承Collection类,故同时继承方法

    • 异于父类中的方法:

      1. indexof():判断集合中某个元素在集合中第一次出现的位置

      2. Lastindexof():判断集合中某个元素在集合中最后一次出现的位置。

      3. add(String Item,int Index):在指定的位置将指定 的项目添加进入集合

      4. get(String Item,int Index):将集合中指定位置的某元素提取出来

      5. set(int index,Element);用指定的元素将集合中指定位置的元素替换

ArrayList
  • List的子类,实现List接口,底层是一个数组(非线程安全)

  • 默认初始容量为10

  • 扩容后的容量为原容量的1.5倍

  • List查询效率高(数组地址连续,斌且每个数据存储空间大小相同),随机增删效率低(涉及大量数据位移,效率低)。

LinedList
  • List的子类,实现List接口,底层是一个单向链表

  • 链表中基本单元为节点(node)

  • 对于单向链表,每一个节点都有两个属性:

    1. 存储的数据

    2. 下一个节点的内存地址

  • 对于双向链表

    1. 上一节点的内存地址

    2. data

    3. 下一节点的内存地址

      image-20210409134124515

       

  • 由于链表存储数据的内存地址不连续,所以链表的查询效率低,但随机增删效率高。这一点和数组的优缺点刚好相反。

 

Vector
  • List的子类,实现List接口,底层是一个数组(线程安全)

  • 默认初始容量为10。

  • 自动扩容之后是原容量的2倍

 

Set

  • Collection的子类,属于接口,Set集合中的元素无序(输出不一定和输入时一样的顺序,但可以根据大小进行排序)不可重复(输入时有重复的元素,单输出时不重复)

HashSet
  • 底层实际上是一个HashMap(即新建一个HashSet集合时,实际上是新建了一个HashMap)

SortedSet
TreeSet
  • TreeSet底层实际上是TreeMap(即新建一个TreeSet对象时,实际上是新建了一个TreeMap对象)

 

Iterator

  • Iterable接口下的子类,也是一种接口,它是一种迭代器,通过它可以对数组进行遍历。

  • Iterator和Collection是关联关系。

     

泛型机制

  1. 泛型:限制集合中只能存放一种类型的元素;

  2. 解决了大量需强致类型转换的元素;

  3. 当需要使用反省机制时,在集合后面添加泛型机制即可。

  4. 泛型可以自定义 Generic<标识符(随意写)>

Map集合

  1. Map集合里的元素是以键值对的形式存储

  2. 用.put()方法向集合里添加元素

  3. 遍历Map集合当方式:

    • 将Map集合里所有的key全部提取出来,返回的是一个Set集合,此时就可以i调用Set集合里的迭代器,通过迭代器遍历key集合,然后通过Map集合中的一个方法.get(key),从而value也取出来了

    • 或者直接将Map集合转换成Set集合

集合常用方法:

package com.anyan.day07;

import java.util.*;

/**
* @author anyan
* @date 2021/4/11-15:29
*/
public class MapTest03 {
  public static void main(String[] args) {
      //Map集合常用方法
      Map<Integer,String> map=new HashMap<>();//利用多态机制创建Map对象
      map.put(1,"I");
      map.put(2,"love");
      map.put(3,"you");//方法1:put()往集合中存放泛型;注意区别Set集合中的add()方法
      Integer integer=map.size();//方法2:得到集合中的元素个数
      System.out.println(integer);
      //map.remove(2);//方法3:删除集合中的某个元素
      Boolean b=map.isEmpty();//方法4:判断集合是否为空
      System.out.println(b);
      Boolean b2=map.containsKey(2);//方法5:判断集合中是否含有某个key
      System.out.println(b2);
      Boolean b3=map.containsValue("I");//判断集合中是否含有某个value
      System.out.println(b3);
      Set<Integer> set=map.keySet();//方法6:取出Map集合中所有的Key组成一个Set集合,故返回值为Set集合;
      Collection<String> c=map.values();//方法7:取出Map集合中所有的value,返回值为一个Collection集合;
      //map.clear();//方法7:清空Map集合
      //遍历Map集合
      //方法1:
      Set<Integer> set1=map.keySet();
      Iterator<Integer> it=set1.iterator();
      while(it.hasNext()){
          Integer integer1=it.next();
          System.out.println(integer1);
      }
      //方法二:
      for(Integer integer1:set1){
          System.out.println(integer1);
      }
      //方法三:将Map集合转换成Set集合
      Set<Map.Entry<Integer,String>> set2=map.entrySet();//Map.Entry();Entry是Map集合里的一个静态内部类
      Iterator<Map.Entry<Integer,String>> iterator=set2.iterator();
      while (iterator.hasNext()){
          Map.Entry<Integer,String> me=iterator.next();
          System.out.println(me);
      }
      //方法四:foreach;(效率最高)
      for(Map.Entry<Integer,String> me:set2){
          System.out.println(me);
      }
  }
}

 

posted @ 2021-04-05 21:32  安妍  阅读(134)  评论(0编辑  收藏  举报