集合类库

当需要在Java程序中记录多个 类型不同对象数据时,则准备一个集合

集合的框架结构

  • java.util.Collection集合存取元素的基本单位是:单个元素
  • java.util.Map集合存取元素的基本单位是:单对元素

在这里插入图片描述

Collection集合

常用方法
  • boolean add(E e)

    • 向集合中添加对象(若有多个对象,则看为一个整体
    • 打印集合中的所有元素时,本质上就是打印集合中的每个对象,也就是让每个对象调用对应类的toString方法
  • boolean addAll(Collection c)

    • 用于将参数指定集合c中的所有元素一个一个地添加到当前集合中

      import java.util.Collection;
      
      public class CollectionTest {
      
          public static void main(String[] args) {
      
              // 1.准备一个Collection集合并打印
              //Collection c1 = new Collection();  
              // 接口不能实例化,也就是不能创建对象
              
              // 接口类型的引用指向实现类的对象,形成了多态
              Collection c1 = new ArrayList();
              // 自动调用toString方法,调用ArrayList类中的toString方法,默认打印格式为:[元素值1, 元素值2, ...]
              System.out.println("集合中的元素有:" + c1); // []
      
              
              // 2.向集合中添加单个元素并打印
              boolean b1 = c1.add(new String("one")); // new 占用新的内存空间
              System.out.println("b1 = " + b1); // true
              System.out.println("集合中的元素有:" + c1); // [one]
      
              b1 = c1.add(Integer.valueOf(2));
              System.out.println("b1 = " + b1); // true
              System.out.println("集合中的元素有:" + c1); // [one, 2]
      
              b1 = c1.add(new Person("zhangfei", 30));
              System.out.println("b1 = " + b1); // true
              // 打印集合中的所有元素时,本质上就是打印集合中的每个对象,也就是让每个对象调用对应类的toString方法
              System.out.println("集合中的元素有:" + c1); // [one, 2, Person{name='zhangfei', age=30}]
      
              
              // 3.向集合中添加多个元素并打印
              Collection c2 = new ArrayList();
              c2.add("three");  // 常量池 不占用新的内存空间
              c2.add(4);        // 自动装箱机制 集合存的是对象 自动装箱把int转为Integer        
              System.out.println("c2 = " + c2); // [three, 4]
              
              // 将c2中的所有元素全部添加到集合c1中,也就是将集合c2中的元素一个一个依次添加到集合c1中
              b1 = c1.addAll(c2); 
              System.out.println("b1 = " + b1); // true
              System.out.println("c1 = " + c1);
              // [one, 2, Person{name='zhangfei', age=30}, three, 4]    
              
              // 表示将集合c2整体看做一个元素添加到集合c1中
              b1 = c1.add(c2);
              System.out.println("b1 = " + b1); // true
              System.out.println("c1 = " + c1);
              // [one, 2, Person{name='zhangfei', age=30}, [three, 4]] 
          }
      }
      
  • boolean contains(Object o) 判断是否包含指定对象

  • boolean containsAll(Collection c) 判断是否包含参数指定的所有对象

  • boolean retainAll(Collection c) 保留当前集合中存在且参数集合中存在的所有对象

  • boolean remove(Object o) 从集合中删除对象

  • boolean removeAll(Collection c) 从集合中删除参数指定的所有对象

  • void clear() 清空集合

  • int size() 返回包含对象的个数

  • boolean isEmpty() 判断是否为空

  • boolean equals(Object o) 判断是否相等

  • int hashCode() 获取当前集合的哈希码值

  • Object[] toArray() 将集合转换为数组

  • Iterator iterator() 获取当前集合的迭代器

Iterator接口

基本概念
  • java.util.Iterator接口主要用于描述迭代器对象,可以遍历Collection集合中的所有元素
  • java.util.Collection接口继承Iterator接口,因此所有实现Collection接口的实现类都可以使用该迭代器对象
常用方法
  • boolean hasNext()

    • 判断集合中是否有可以迭代/访问的元素
  • E next()

    • 用于取出一个元素并指向下一个元素

      import java.util.Iterator;
      
      public class CollectionPrintTest {
      
          public static void main(String[] args) {
      
              // 1.准备一个Collection集合并放入元素后打印
              Collection c1 = new ArrayList();
              c1.add("one");
              c1.add(2);
              c1.add(new Person("zhangfei", 30));
              
              // 遍历方式一: 自动调用toString方法   String类型的整体
              System.out.println("c1 = " + c1); 
              // [one, 2, Person{name='zhangfei', age=30}]
              
              // 2.遍历方式二:使用迭代器来遍历集合中的所有元素  更加灵活
              // 2.1 获取当前集合中的迭代器对象
              Iterator iterator1 = c1.iterator();
              /*
              // 2.2 判断是否有元素可以访问
              System.out.println(iterator1.hasNext()); // true
              // 2.3 取出一个元素并指向下一个
              System.out.println("获取到的元素是:" + iterator1.next()); // one
      
              System.out.println(iterator1.hasNext()); // true
              System.out.println("获取到的元素是:" + iterator1.next()); // 2
      
              System.out.println(iterator1.hasNext()); // true
              System.out.println("获取到的元素是:" + iterator1.next()); // Person{name='zhangfei', age=30}
      
              System.out.println(iterator1.hasNext()); // false
              System.out.println("获取到的元素是:" + iterator1.next()); // 编译ok,运行发生NoSuchElementException没有这样的元素异常
               */
              while (iterator1.hasNext()) {
                  System.out.println("获取到的元素是:" + iterator1.next());
              }
          }
      }
      

List集合

基本概念
  • java.util.List集合是Collection集合的子集合,该集合中允许有重复的元素且有先后放入次序
  • 该集合的主要实现类有:ArrayList类、LinkedList类、Stack类、Vector类
    • ArrayList类的底层是采用动态数组进行数据管理的,支持下标访问,增删元素不方便
    • LinkedList类的底层是采用双向链表进行数据管理的,访问不方便,增删元素方便
      • 可以认为ArrayList和LinkedList的方法在逻辑上完全一样,只是在性能上有一定的差别,ArrayList 更适合于随机访问而LinkedList更适合于插入和删除;在性能要求不是特别苛刻的情形下可以忽略这个差别
    • Stack类的底层是采用动态数组进行数据管理的,该类主要用于描述一种具有后进先出特征的数据结构,叫做栈(last in first out LIFO)
    • Vector类的底层是采用动态数组进行数据管理的,该类与ArrayList类相比属于线程安全的类(ArrayList是它的线程不安全版本),效率比较低,以后开发中基本不用
常用方法
  • void add(int index, E element) 向集合中指定位置添加元素

  • boolean addAll(int index, Collection c) 向集合中添加所有元素

  • E get(int index) 从集合中获取指定位置元素

  • int indexOf(Object o) 查找参数指定的对象

  • int lastIndexOf(Object o) 反向查找参数指定的对象

  • E set(int index, E element) 修改指定位置的元素

  • E remove(int index) 删除指定位置的元素

    • 删除前面的元素后,后续元素自动向前移,故选择从后向前删

      System.out.println("集合中的元素有:" + lt1); // [one, two, three, four]
      
      for (int i = lt1.size()-1; i >= 0; i--) {
          System.out.println("被删除的元素是:" + lt1.remove(i));
      }
      System.out.println("最终集合中的元素有:" + lt1); // []
      
  • List subList(int fromIndex, int toIndex) 用于获取子List

    • 子集合和当前集合共用同一块内存空间

      System.out.println("集合中的元素有:" + lt1); // [one, two, three, four]
      
      List lt2 = lt1.subList(1, 3); // [1,3) 取的位置为1和2
      System.out.println("lt2 = " + lt2); // [two, three]
      
      // 验证:子集合和当前集合共用同一块内存空间
      str2 = (String) lt2.remove(0);
      System.out.println("被删除的元素是:" + str2); // two
      System.out.println("删除后lt2 = " + lt2); // [three]
      System.out.println("删除后lt1 = " + lt1); // [one, three, four]
      

Queue集合

基本概念
  • java.util.Queue集合是Collection集合的子集合,与List集合属于平级关系
  • 该集合的主要用于描述具有先进先出特征的数据结构,叫做队列(first in first out FIFO)
  • 该集合的主要实现类是LinkedList类,因为该类在增删方面比较有优势
常用方法
  • boolean offer(E e) 将一个对象添加至队尾,若添加成功则返回true
  • E poll() 从队首删除并返回一个元素
  • E peek() 返回队首的元素(但并不删除)

Set集合

基本概念
  • java.util.Set集合是Collection集合的子集合,与List集合平级
  • 该集合中元素没有先后放入次序,且不允许重复
  • 该集合的主要实现类是:HashSet类 和 TreeSet类以及LinkedHashSet类
    • HashSet类的底层是采用哈希表进行数据管理的
    • TreeSet类的底层是采用红黑树进行数据管理的
    • LinkedHashSet类与HashSet类的不同之处在于内部维护了一个双向链表,链表中记录了元素的迭代顺序,也即元素插入集合中的先后顺序,因此便于迭代
常用方法
  • 参考Collection集合中的方法即可

Map集合

基本概念
  • java.util.Map集合中存取元素的基本单位是:单对元素,其中类型参数如下:
    • K - 此映射所维护的键(Key)的类型,相当于目录
    • V - 映射值(Value)的类型,相当于内容
    • 该集合中key是不允许重复的,而且一个key只能对应一个value
  • 该集合的主要实现类有:HashMap类、TreeMap类、LinkedHashMap类、Hashtable类、 Properties类
    • HashMap类的底层是采用哈希表进行数据管理的
    • TreeMap类的底层是采用红黑树进行数据管理的
    • LinkedHashMap类与HashMap类的不同之处在于内部维护了一个双向链表,链表中记录了 元素的迭代顺序,也就是元素插入集合中的先后顺序,因此便于迭代
    • Hashtable类是古老的Map实现类,与HashMap类相比属于线程安全的类,且不允许null作为key或者value的数值
    • Properties类是Hashtable类的子类,该对象用于处理属性文件,key和value都是String类型的
  • Map集合是面向查询优化的数据结构, 在大数据量情况下有着优良的查询性能,经常用于根据key检索value的业务场景
常用方法
  • V put(K key, V value) 将Key-Value对存入Map,若集合中已经包含该Key,则替换该Key所对应的Value返回值为该Key原来所对应的Value,若没有则返回null
  • V get(Object key) 返回与参数Key所对应的Value对象,如果不存在则返回null
  • boolean containsKey(Object key); 判断集合中是否包含指定的Key
  • boolean containsValue (Object value); 判断集合中是否包含指定的Value
  • V remove(Object key) 根据参数指定的key进行删除
  • Set keySet() 返回此映射中包含的键的Set视图
  • Collection values() 返回此映射中包含的值的Set视图
  • Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射的Set视图
相关常量
  • DEFAULT_INITIAL_CAPACITY : HashMap的默认容量是16
  • DEFAULT_LOAD_FACTOR:HashMap的默认加载因子是0.75
  • threshold:扩容的临界值,该数值为:容量*填充因子,也就是12
  • TREEIFY_THRESHOLD:若Bucket中链表长度大于该默认值则转化为红黑树存储,该数值是8
  • MIN_TREEIFY_CAPACITY:桶中的Node被树化时最小的hash表容量,该数值是64

Collections类

基本概念
  • java.util.Collections类主要提供了对集合操作或者返回集合的静态方法
常用方法
  • 请查阅手册
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值