Java.util----集合

集合

集合概述

  • 数组:存放一组相同数据类型的数据结构

    • 数组的特点:
      1. 数组一旦创建,其长度不能改变
      2. 一个数组只能存放一种数据类型的数据
  • 集合:是一种存放多种数据类型的数据结构

    • 集合的特点:
      1. 集合的长度是可变的
      2. 对存放数据的数据类型无限制
定义
  • 在Java中,使用一些类来描述集合,这样的类我们称之为集合类,集合类的对象就是一个集合
  • 集合类 obj = new 集合类;
学习任务
  1. 了解Java中的集合类及其继承关系
  2. 创建集合类的对象(创建集合)
  3. 向集合中添加元素
  4. 获取集合中的元素(获取单个元素)
  5. 遍历集合(一次取出集合中的所有元素)

集合大的分类

  • Collection(单值集合)(接口):是所有单值集合的父接口

    • List(接口):集合中的元素是有序可重复的
      • ArrayList
      • LinkedList
      • Vector
    • Set(接口):集合中的元素是无序不可重复的
      • HashSet
      • TreeSet

    单值集合:ArrayList、LinkedList、Vector

  • Map(键值对集合)(接口):是所有键值对集合的父接口

    • AbstractMap(抽象类)
      • HashMap
    • Hashtable
      • Properties

    键值对集合:HashMap、Hashtable、Properties
    在这里插入图片描述

集合中的各种区别

  1. Collection 和Collections 的区别(接口/帮助类)

    • Collection 是一个接口,是所有单值集合的父接口
    • Collections 是一个帮助类,这个类中提供了很多对集合进行各种操作的静态方法
  2. List 接口 和 Set 接口的区别(有序可重复/无序不可重复)

    • List接口和Set接口都是Collection接口的子接口
    • List中的元素是有序可重复的
    • Set中的元素是无序不可重复的
  3. ArrayList 和 LinkedList的区别(数组/链表)

    • ArrayList 和 LinkedList都是List 接口的实现类,其元素都是有序可重复的

    • ArrayList 中的元素是基于数组的实现

      • 查询元素:顺序查找,速度快
      • 添加元素:尾部添加,速度较快
      • 插入元素:会涉及到内存中元素的依次移动,速度较慢
    • LinkedList中的元素是基于链表的实现

      • 查询元素:需要根据前一个元素获取到后一个元素的地址依次查找,速度相对较慢
      • 添加元素:尾部添加,但是有地址的操作,速度相对较慢
      • 插入元素:无须依次移动元素,速度较快

      链表特点:不必事先估计存储空间,可随机访问任一元素,所需空间和线性表的长度成正比
      在这里插入图片描述

  4. ArrayList 和 Vector 的区别(线程非安全,速度快/线程安全)

    • ArrayList 和 Vector 都是基于数组的存储;Vector 实现了同步是线程安全的(多线程中用),而ArrayList 是线程非安全的,但是ArrayList 的存储效率较高。
  5. HashSet 和 TreeSet的区别(Hash码散列存储/树形存储)

    • 两者都是Set接口的实现类,其元素都是无序不可重复的;区别在于元素存储方式不同,HashSet是按照hash码散列存储,TreeSet树形存储
  6. HashMap 和 Hashtable 的区别(null,线程)

    • 两者都是Map 接口的实现类,都表示键值对集合。

    • HashMap 中允许一个null键和多个null值,但Hashtable中不允许使用null作为key或者value;

    • HashMap 未实现同步,是线程非安全的;Hashtable实现了同步,是线程安全的

      Propreties键、值都为String类型
      在这里插入图片描述

    • 键值对

      key value
      null "aaa"
      "bbb" 3
      1 null
      “a” null

Collection的常用方法及迭代器

collection接口常用方法
  1. 创建集合

    ArrayList list = new ArrayList();

  2. boolean add(E e):将指定的元素添加到集合中

    list.add("abc");
    list.add("wahaha");
    list.add(3);
    list.add(true);
    
  3. int size():获取当前集合中存放元素的个数

    int len = list.size();
    System.out.println("len-->" + len);
    
  4. boolean addALL(Collection c):将参数指定的集合(list)中的所有元素全部添加到当前集合(b)

    b.addAll(list);
    
  5. void clear():清空当前集合中的所有元素

    list.clear();
    
  6. boolean contains(Object o):检查当前集合中是否包含参数指定的元素

    boolean flag1 = list.contains("wahaha");
    
  7. boolean containsAll (Collection<?> c):检查当前集合中是否包含参数指定的集合中的元素

    boolean flag2 = b.containsAll(list);
    
  8. boolean isEmpty():判断当前集合是否为null

    boolean flag3 = list.isEmpty();
    
  9. boolean remove(Object o):从当前集合中移除参数指定的元素

    boolean flag4 = list.remove("wahaha");
    
  10. boolean removeALL(Collection<?> c):从集合b中移除集合(list)中的所有元素

    boolean flag5 = b.removeAll(list);
    
  11. Object [] toArray():将当前集合的元素全部取出,存放到一个Object类型的数组中

    Object [] obj = list.toArray();
    for(Object o : obj){
         
        System.out.println(o);
    }
    
List接口常用用法
  • List集合,因为其中元素的存储是有序的,所有我们可以用索引来标注每个元素,List集合中索引的范围【0~list.size()-1】
  1. void add(int index, E element):将第二个参数指定的元素插入到list集合中索引为第一个参数的位置

    list.add(3, "e");
    
  2. E get(int index):获取当前集合中指定索引处的元素

    Object o1 = list.get(2);
    
  3. E remove(int index):移除指定索引处的元素

    Object o2 = list.remove(3);
    
  4. boolean remove(Object o) :移除集合里的指定元素

    集合里面存放的为封装类型,普通类型要转为封装类型

    boolean flag1 = list.remove( new Integer(3) );
    
  5. int indexOf(Object o):元素第一次出现的索引

    int n = list.indexOf("a");
    
  6. int lastIndexOf(Object o):元素最后一次出现的索引

     int m = list.lastIndexOf("a");
    
  7. 遍历集合

    Object [] obj = list.toArray();
    for(Object o : obj){
         
        System.out.println(o);
    }
    
    for(int i = 0; i < list.size(); i++){
         
        Object obj2 = list.get(i);
        System.out
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值