集合总结

首先我们先看下集合的大体结构图

在这里插入图片描述

接口Collection讲解

  • 首先接口Collection作为我们常用的List,Set,的顶层接口,由于三者都是接口不能直接new接口,我们通常都是使用:

    Collection<String> str = new ArrayList<String>();
    //或者使用接口new实现类
    List<String> list = new ArrayList<String>();
    
  • 接口Collection常用方式介绍

    • boolean add(E e):给集合添加元素
    • boolean remove(Object obj):删除集合中指定的元素,成功返回true,失败返回false
    • boolean contains(Object obj):判断集合中是否包含指定的元素
    • int size():获取集合中元素的个数
    • boolean isEmpty():判断集合是否为空,就是判断集合中的元素个数是否为零
    • Object[] toArray():把集合中的元素,存储到数组中。
  • 常用方法简单演示

public class CollectionTest {
    public static void main(String[] args) {


        CollectionTest test = new CollectionTest();
        System.out.println(test.add());
        System.out.println(test.remove());
        System.out.println(test.contains());
        test.size();
        System.out.println(test.isEmpty());
        test.toArray();
    }

    /**
     * boolean add()方法测试
     */
    public boolean add() {
        Collection<String> name = new ArrayList<>();
        boolean b = name.add("张三");
        return b;
    }
    /**
     * boolean remove(Object obj)测试
     */
    public boolean remove() {
        Collection<String> name = new ArrayList<>();
        name.add("张三");
        boolean remove = name.remove("张三");
        return remove;
    }
    /**
     * boolean contains(Object obj)
     */
    public boolean contains() {
        Collection<String> name = new ArrayList<>();
        name.add("张三");
        name.add("李四");
        boolean contains = name.contains("王五");
        return contains;
    }
    /**
     * int size()
     */
    public void size() {
        Collection<String> name = new ArrayList<>();
        name.add("张三");
        name.add("张三");
        name.add("李四");
        name.add("王五");
        int size = name.size();
        System.out.println(size);
    }
    /**
     * boolean isEmpty()
     */
    public boolean isEmpty() {
        Collection<Integer> isnull = new ArrayList<>();
        isnull.add(1);
        isnull.add(2);
        isnull.add(3);
        isnull.add(4);
        boolean empty = isnull.isEmpty();
        return empty;
    }
    /**
     * Object[] toArray()
     */
    public void toArray() {
        Collection<String> name = new ArrayList<>();
        name.add("张三");
        name.add("李四");
        name.add("王五");
        name.add("赵六");
        Object[] objects =  name.toArray();
        for (Object object : objects) {
            System.out.println(object);
        }
    }
}

接口List讲解

  1. 接口List继承了Collection接口,因此具有了Collection接口的方法。

  2. 除此之外List常用方法

    get(int index);
    set(int index,Object obj);
    add(int index,Object obj);
    remove(int index);
    
  3. List常用实现类讲解。

    • ArrayList讲解:

      • ArrayList是基于数组实现的list类,所以ArrayList类封装了一个动态的,允许再分配的Object[]数组,允许保存所有元素,包括null,可以根据索引位置对集合进行访问,查询快,增删慢,线程不安全,ArrayList创建时大小为0,当加入第一个元素时,进行第一次扩容,默认容量大小为10,每次都已当前数组大小的1.5倍去扩容。
    • ArrayList创建以及遍历方式。

      • //ArrayList创建方式
        List<T> list = new ArrayList<>();
        
      •  /**
             * 使用iterator迭代器遍历
             */
            public void List() {
                List<String> list = new ArrayList<>();
                list.add("张三");
                list.add("李四");
                list.add("王五");
                list.add("赵六");
                list.add("周七");
                Iterator<String> iterator = list.iterator();
                while (iterator.hasNext()) {
                    String next = iterator.next();
                    System.out.println(next);
                }
           
            }
        
        
        
      •  /**
             * 使用for遍历
             */
            public void List() {
                List<String> list = new ArrayList<>();
                list.add("张三");
                list.add("李四");
                list.add("王五");
                list.add("赵六");
                list.add("周七");
                for (String s : list) {
                    System.out.println(s);
                }
        
            }
        
      • list遍历方式还有foreach,转数组等,此处就不一一列举了。

    • ListedList讲解

      • 底层使用双向循环链表的数据结构,排列有序可重复,查询慢,增删快,线程不安全。

接口Set讲解

  • Set无序,不可重复。
  • HashSet底层使用Hash表实现,内部使用了HashMap,排列无序不可重复,存储速度快,线程安全。
  • LinkedHashSet底层采用Hash表存储,并用双向链表记录插入顺序,排列有序不可重复,存取速度较HashSet略慢,比TreeSet快,线程不安全。
  • TreeSet底层使用红黑树实现,内部使用了NavigableMap,按自然顺序或者自定义顺序存放,不可重复,线程不安全。

接口Map讲解

  • 接口Map不属于Collection接口,Map代表具有映射关系的集合。
  • HashMap底层使用哈希表,1.8以后又加了红黑树来实现,键无序,不可重复,可为null,值可重复为null,存储速度快,线程不安全。
  • HashTable不允许null,线程安全。
  • TreeMap二叉树实现,可对集合中的键进行排序。
    个人博客
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值