zoukankan      html  css  js  c++  java
  • Collection集合类

    单列集合类体系:

    Collection是单列集合的根接口,有两个重要的接口,分别是:

    java.util.List:List接口的特点是元素有序,元素可重复

    • List接口的主要实现类是
    1. ArrayList:实现类,查询快,增删慢,底层是数组
    2. LinkedList:实现类,查询慢,增删快,底层是集合

    java.util.Set:Set接口的特点是元素不可重复,元素无索引

    • Set接口的主要实现类是
    1. HashSet:存取无序
    2. LingkedHashSet:存取有序
    3. TreeSet:对元素进行排序

    Callection常用的功能:

    因为它是所有集合的父类,所以它的方法所有集合都可以使用

    • boolean add(E e):把给定的对象添加到集合中
    • void clear():清空集合中所有的元素
    • boolean remove(E e):在集合中删除指定的对象
    • boolean contains(Object obj):判断给定的对象在不在集合中
    • boolean isEmpty():判断当前集合是否为空
    • int size():返回集合中的元素个数
    • Object[ ] toArray():把集合中的元素,存储到数组中

    iterator迭代器:(接口)

    主要用于遍历集合中的所有元素

    迭代器的构造方法是泛型,所以所有的引用类型都可以使用

    常用的方法有两个:

    • boolean hasNext():如果下一个还有元素,那么返回true
    • E next():返回迭代的下一个元素

    使用方法:先进行hasNext()方法判断下一个话有没有元素,有的话就next()迭代

     // 获取迭代器对象
            Iterator<String> it = col.iterator();
    
            // 循环判断集合中是否有元素可以迭代
            while (it.hasNext()){
                // 说明有元素可以迭代
                String e = it.next();
                System.out.println(e);

    注意:

    1. 如果集合中没有元素可以迭代,那么使用next()就会报错
    2. 迭代完了还想迭代,那么必须重新创建新的迭代器对象
    3. 在进行迭代的过程中,如果添加或则删除元素,将无法继续迭代
    4. 当迭代完一个元素,将这个元素通过迭代器对象名调用remove方法,就可以删除该元素

    增强for:

    增强for循环是专门为了遍历数组和集合的,它的原理就是iterator迭代器

    for(元素的数据类型  变量 : Collection集合or数组){ 
          //写操作代码
    }

     泛型:

    在使用集合的时候不写类型,那么存的时候啥都能存,但取得时候啥也不是,这就很尴尬了

    什么时候使用泛型:如果一个类中,某个方法的参数类型或者返回值类型不确定的时候,可以把该方法定义为含有泛型的方法

    所以我们在编译阶段直接对类型进行控制,定义存储泛型的数据

    修饰符 class 类名<代表泛型的变量> {  }
    代表泛型的变量: 可以是任意字母  例如: T,E...

    泛型是使用场景:

    定义类:修饰符  class  类名<代表泛型的接口>{  }

    定义方法:修饰符 <代表泛型的变量>  返回值类型  方法名(参数){  };

    定义接口:修饰符  interface  接口名 <代表泛型的变量>{   };

    • 如果实现类还是不确定,那么实现类也可以定义成泛型:
    • public class 实现类名<代表泛型的变量>  implements  接口名<代表泛型的接口>{  };

    泛型通配符:

    在不知道使用什么类型来接收的时候,可以使用?表示,这个时候只能接收数据,不可以往集合中存储数据

     受限泛型:

    上限:类型名称  <?  extends  类> 对象名称。只能接收该类型及其子类

    下限:类型名称  <?  super  类>  对象名称。只能接收该类型及其父类

    List接口

    特点:

    • 专门存储有序的集合,比如说存的是1,2,3那么在集合中存储的顺序也是1,2,3.
    • 它是一个有索引值的集合,通过索引就可以精确的找到要操作的元素
    • 可以存储重复的元素

    子类:

    ArrayList集合:数组结构存储,日常开发中多用于查询数据,遍历数据。

    LinkedList集合:链表结构存储,方便元素tianjia、删除的集合

    - `public void addFirst(E e)`:将指定元素插入此列表的开头。
    - `public void addLast(E e)`:将指定元素添加到此列表的结尾。
    - `public E getFirst()`:返回此列表的第一个元素。
    - `public E getLast()`:返回此列表的最后一个元素。
    - `public E removeFirst()`:移除并返回此列表的第一个元素。
    - `public E removeLast()`:移除并返回此列表的最后一个元素。
    - `public E pop()`:从此列表所表示的堆栈处弹出一个元素。
    - `public void push(E e)`:将元素推入此列表所表示的堆栈。

     Collections集合工具类的常用功能:

    常用方法:

    • public  static  void shuffle(List<?> list):打乱集合顺序
    • public static <T>void sort (List <T> list):将集合中的元素按照默认规则排序
    • public static  <T> void sort(List <T> list,Comparator<? super T>):将集合中的元素按照指定的规则排序

    public static <T>void sort (List <T> list):

    当我们需要改变默认顺序进行排序时,需要使用Comparator比较器:

    • 第一步:创建一个类去实现Comparator接口
    • 第二步:在该类中创建你要依据比较的成员变量(比如:年龄age)
    • 第三步:重写compareTo方法(this表示前,参数表示后,前减后表示升序)
    •  第四步:在main方法中调用该类,创建集合对象,添加数据,调用sort方法

    public static  <T> void sort(List <T> list,Comparator<? super T>):

    将集合中元素按照指定规则排序-->按照年龄升序排序

    Collections.sort(list, new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    // 指定排序规则
                    // 前减后  升序
                    // 后减前  降序
                    // 前: 第一个参数o1  后:第二个参数o2
                    return o2 - o1;
                }
            });

    可变参数:

    通过定义一个方法接收多个参数:参数的类型必须一致

    格式:修饰符 返回值类型 方法名(参数类型。。。形参名){      }

    需要注意的是:

    • 一个方法只能有一个可变参数
    • 如果方法中有多个阐述,可变参数要放在最后(因为系统会把参数从第一个位置开始放,如果第一个参数是可变的,那么后面其它的参数都会放到第一个类型中)
     method3("itheima",10,20);
    
    
    public static void method3(String  str,int... nums){
    
        }

    在Collections中的应用场景:

    // 往list集合中添加批量元素
            Collections.addAll(list,"2","A","K","Q","J","10","9","8","7","6","5","4","3");

    Set接口:

    特点:

    • 元素无索引,元素不可重复(唯一性)
    • HashSet集合:实现类--元素存取无序
    • LinkedHashSet集合:实现类--元素存取有序
    • TreeSet集合:--对元素进行排序

    注意:

    • set集合没有特殊的方法,都是使用Collection接口的方法
    • set集合没有索引,只能通过增强for遍历

    Set的实现类:

    HashSet:哈希表存储

    使用哈希表存储保证了元素的唯一性

    HashSet的使用方法和Collection基本相同

    使用HashSet集合存储自定义元素:

    给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己比较的方式,才能保证集合对象的唯一性。

    • 在自定义的类中重写hashCode和equals方法
    • 这样就不会因为集合的地址不一样而使得相同的数据被传入进HashSet中

    LinkHashSet:哈希表加链表存储

    LinkHashSet实现类和HashSet的区别在于底层增加了链表,这样使得LinkHashSet拥有了有序的属性(是存储有序,但是还是没有索引值,元素不可重复)

    TreeSet集合:红黑树

    特点:元素唯一,没有索引,使用元素的自然顺序进行排序,或者根据TreeSet提供的Comparator比较器进行排序

     TreeSet<Integer> set2 = new TreeSet<>(new Comparator<Integer>() {
                @Override
                public int compare(Integer o1, Integer o2) {
                    /*
                        指定排序规则:
                        前减后  升序
                        后减前  降序
                        前:第一个参数  后:第二个参数
                     */
                    return o1 - o2;
                }
            });

    Map集合:

    特点:

    • Map集合定义的是双列集合的规范
    • Map集合存储元素是以键值对的形式存储的,每一个键值对都有键和值
    • Map集合的键是唯一的,值是可以重复的,但是如果键重复就会被覆盖(班和任课老师)
    • 根据键取值

    Map的常用方法:

    • public V put(K key, V value): 把指定的键与指定的值添加到Map集合中。

    • public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。

    • public V get(Object key) 根据指定的键,在Map集合中获取对应的值。

    • public boolean containsKey(Object key):判断该集合中是否有此键

    • public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。

    • public Set<Map.Entry<K,V>> entrySet(): 获取到Map集合中所有的键值对对象的集合(Set集合)。

    通过键找值:先使用KeySet方法找到所有键,再用增强for,通过get方法找到值

    键值对找键,值:通过entrySet方法找到所有键值对,再用增强for,通过getKey和getValue方法分别找到键和值

    HashMap集合:(数组(查询快)+单行链表/红黑树)

    HashMap:存储无序,不能存储重复值(使用的时候要重写hasCode和equals方法)

    LinkHashMap集合:(哈希表+链表)

    相比HashMap底层多了链表结构,使得它存储有序

    TreeMep集合:(红黑树)

    同样可以使用自然排序和比较器排序

    • 自然排序:直接使用TreeMap无参构造方法,默认升序
    • 比较器排序:使用TreeMap构造方法new  Comperator,第一个参数限制键的类型,第二个参数限制值得类型
  • 相关阅读:
    转发和重定向的区别
    关于Daydream VR的最直白的介绍
    Duplicate Protocol Definition of DTService Is Ignored
    automatically select architectures
    java
    初识反射
    java网络编程
    Map接口
    Set,List
    正则表达式
  • 原文地址:https://www.cnblogs.com/YwhsR0129/p/13662398.html
Copyright © 2011-2022 走看看