美文网首页
2-JAVA类的Collection集合

2-JAVA类的Collection集合

作者: abboo | 来源:发表于2020-10-15 12:22 被阅读0次

    Collection集合

    32. Collection接口

    定义的是所有单列集合中共性的方法
    所有的单列集合都可以使用共性的方法
    没有带索引的方法

                      ->List接口(1.有序的集合,2.允许存储重复的元素,3.有索引,可以使用for循环)
                    / Vector ArraylList LinkedList
    Collection接口-
                    \
                      ->Set接口(不允许存储重复的元素,没有索引)
                      TreeSet HashSet(无序)-LinkedHashSet(有序)
    

    Collection接口共性的方法:

    1. bollean add(E e)
    2. void clear()
    3. bollean remove(E e)
    4. bollean contains(E e)
    5. bollean isEmpty()
    6. int size()
    7. Object[] toArray()

    33.Iterator接口

    迭代:即Collection集合元素的同用户去方式。在取元素之前要判断集合中有没有元素,如果有,就把元素取出来没继续再判断,如果还有就再取出来,一直把集合中的元素全部取出,这种取出方式专业术语叫迭代

    两个常用方法

    boolean hasNext()

    E next()

    Collection 接口中有一个方法iterator()这个方法返回的就是迭代器的实现类对象

    ==增强for循环==

    foreach

    34. 泛型

    是一种未知的数据类型,当我们不知道是用什么数据类型的时候,可以使用泛型

    泛型也可以看成是一个变量,来接受数据类型

    E e:Element 元素

    T t:Type 类型

    定义含有泛型的方法:泛型定义在方法的修饰符和返回值类型之间

    修饰符<泛型> 返回值类型 方法名 (参数列表(使用泛型)){
        
    }
    
    public <M> void method(M m){
        
    }
    gm.methd(10)
    
    //静态
    public static <S> void smethod(S s){}
    类名.smethod(10)
    
    

    定义含有泛型的接口

    public interface GenericInterface<I>{
        public abstract void method(I i);
    }
    // 第一种使用方式,定义接口的实现类,实现接口,指定接口的泛型
    public class GenericInterfaceImpl1 implements GenericInterface<String>{
        @Override
        public void method(String s){
            sout
        }
    }
    //第二种使用方式,接口是用什么泛型,实现类就是用什么泛型
    //相当于定义了含有泛型的类,创建对象的时候确定泛型的类型
    
    public class GenericInterfaceImpl2<I> implements GenericInterface<I>{
        @Override
        public void method(I i){
            sout
        }
    }
    

    泛型的通配符: ?:代表任意的数据类型

    不能创建对象使用,只能作为方法的参数使用

    //定义一个方法,能遍历所有类型的ArrayList集合
    public static void printArray(ArrayList<?> List){
        //使用迭代器遍历集合
        Iterator<?> it =list.iterator()
        while(it.hast()){
            Object o = it.next();
        }
    }
    
    

    泛型的上限限定和下限限定

    泛型的上限限定:? extends E 代表使用的泛型只能是E类型的子类/本身
    泛型的下限限定:? super E   代表使用的泛型只能是E类型的父类/本身
    //泛型的上限:此时泛型?必须是Number类型或者Number类型的子类
    public static void getElement1(Collection<? extends Number> coll){}
    //泛型的下限:此时泛型?必须是Number类型或者Number类型的父类
    public static void getElement2(Collection<? super Number> coll){}
    

    HashSet存储自定义类型元素

    set集合报错元素唯一:

    存储的元素必须重写hashCode和equals方法

    35. 可变参数

    当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数

    修饰符 返回值类型 方法名(数据类型...变量名){}
    原理:
        可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组来存储这些参数
        
        
        public static int add(int...arr){
            int sum = 0
            for(int i:arr){
                sum+=i
            }
            return sum
        }
    
    1. 一个方法的参数列表只能有一个可变参数
    2. 如果方法的参数有多个,那么可变参数必须写在参数列表的末尾

    36. Collections

    是集合工具类,用来对集合进行操作

    • public static <T> boolean addAll(Collection<T> c, T... elements):忘记和中添加一些元素
    • public static void shuffle(List<?> list):打乱集合顺序
    • public static void sort(List<?> list):将集合中元素按照默认规则排序
      • 使用前提,必须重写 compareTo()方法
    • public static <T> void sort(List<T> list, Comparator<? super T>):将集合中元素按照指定规则排序
      • Comparable:自己(this)和别人比较,自己需要实现Comparable接口,重写比较规则的compareTo方法
      • Comparator:相当于找一个第三方的裁判,比较两个
    Collections.sort(list01, new Comparator<Integer>(){
        @Override
        public int compare(Integer o1,Integer o2){
            return o1-o2 
        }
    }
    

    37. JDK9对集合添加的优化

    java 9 添加了几种几何工厂方法,更方便创建少量元素的集合、map实例.新的List、Set、Map的静态工厂方法可以更方便地创建集合的不可变实例

    List、Set、Map接口里边增加了一个静态方法of,可以个自己和一次性添加多个元素

    ==static <E> List<E> of (E... elements)==

    适用前提

    • 当集合中存储的元素的个数已经确定了,不再改变时使用

    ==注意==:

    1. of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类
    2. of方法的返回值是一个不能改变的集合额,集合不能再使用add,put方法添加元素,会抛出异常
    3. Set接口和Map接口在调用of方法的时候不能有重复的元素,否则会抛出异常

    相关文章

      网友评论

          本文标题:2-JAVA类的Collection集合

          本文链接:https://www.haomeiwen.com/subject/elinpktx.html