从零学Java-14 Collection 集合

Collection

集合是 java 中提供的一种容器,可以用来存储多个数据
数组的长度是固定的,集合的长度是可变的
数组中存储的是同一类型的元素,可以存储基本数据类型值,集合存储的都是对象,而且对象的类型可以不一致,在开发中一般对象多的时候,都是用集合进行存储

集合框架
  • 集合按照其存储结构可以分为两大类,分别是单列集合 java.util.Collection 和双列集合 java.util.Map
  • Collection 单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.List 和 java.util.Set 其中,List的特点是元素有序,元素可重复,Set的特点是元素无序,且不可重复,List接口的主要实现有 java.util.ArrayList 和 java.util.LinkedList, Set接口的主要实现有 java.util.HashSet 何 java.util.TreeSet
  • 集合
Collection单列集合,Interface
List,存取有序,允许重复元素, 有索引,可用for
Set,不允许存重复元素,没有索引不可用for
Vector集合
ArrayList集合
LinkedList集合
TreeSet集合,无序
HashSet集合,无序
LinkedHashSet集合
  • Collection 常用功能
    所有单列集合的最顶层接口,定义了所有单列集合共性方法
    1. public boolean add(E,e);
    2. public void clear();
    3. public boolean remove();
    4. public boolean contains();
    5. public boolean isEmpty();
    6. public int size();
    7. public Object[] toArray(); 把集合中的元素存储到数组中
java.util.List 接口 ,带索引的方法
1. public void add();
2. public E get();	返回集合中指定位置的元素
3. public E remove();
4. public E set(); 用指定元素替换集合中指定位置的元素,返回被替换的元素
  • ArrayList 集合(异步,多线程),底层就是一个数组结构,查询快,增删慢(每次都会创建新数组),查询功能多推荐使用,增删多不推荐使用
  • LinkedList集合,List接口的链表实现,底层是链表结构,查询慢,增删快,方便添加和删除,注意: 使用LinkedList集合的特有方法,不能使用多态
    1. public void addFirst(E,e); 将制定元素插入此列表的开头
    2. public void addLast(E,e); 将制定元素插入此列表的结尾
    3. public void push(E,e) 将元素推入此列表所表示的堆栈
    4. public E getFirst(); 返回此列表第一个元素
    5. public E getLast(); 返回此列表最后一个元素
    6. public E removeFirst(); 移除并返回第一个元素
    7. public E removeLast(); 移除并返回最后一个元素
    8. public E pop(); 此列表所表示的堆栈处弹出一个元素
    9. public boolean isEmpty(); 如果列表不包含元素,返回true
  • Vector集合(单列集合的祖宗,了解, 和ArrayList类似,底层为数组,(同步)单线程,速度慢)
java.util.Set接口 ,无索引,不重复
  • 不允许存储重复的元素

  • 没有索引及其方法,不能使用for遍历

  • java.util.HashSet 集合,implements Set接口

    1. 无序集合,存取顺序可能不一致
    2. 底层是一个哈希表结构,查询速度非常快
  • 哈希值,是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,模拟得到的,不是数据存储的物理地址),Object类有一个方法,可以获取对象的哈希值: int hashCode();

  • 哈希表(速度快)

    1. jdk1.8之前: 哈希表 = 数组 + 链表
    2. jdk1.8之后: 哈希表 = 数组 + 链表,哈希表 = 数组 + 红黑树(提高查询速度)
      数组结构: 把元素进行分组(相同哈希值的元素是一组), 链表/红黑树结构把相同哈希值元素连到一起, 存储数据到集合中,先计算元素的哈希值(两个元素不痛,哈希值相同>哈希冲突)
      如果链表的长度超过了8位,就会把链表转换为红黑树(提高查询速度)
  • Set为何不允许存储重复元素
    Set集合在调用add的时候,会调用元素的hashCode方法和equals方法,判断元素是否重复,先判断hashCode再判断equals(前提必须重写hashCode和equals方法,内置类等已重写)

  • LinkedHashSet 继承 HashSet, 底层是一个 哈希表+链表(多了一条链表,记录元素的存储顺序,保证元素有序)

Collections 集合工具类

  • java.utils.Collections是集合工具类,用来对集合进行操作
    1. public static boolean addAll(Collection c, T …elements); 往集合中添加一些元素
    2. public static void shuffle(List<?> list); 打乱顺序,打乱集合顺序
    3. public static void sort(List list); 将集合中元素按照默认规则排序
      ps: sort使用前提: 被排序的集合里存储的元素,必须实现Comparable接口,重写接口中的方法 compareTo定义排序规则(自己this 和别人 参数 比较, this.xxx - 参数.xxx为升序,反之降序)
    4. public static void sort(List list, comparator<? super T>); 将集合中元素按照指定规则排序
      comparator 相当于找一个裁判,比较两个(a1-a2: 升序,反之降序)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值