2-JAVA类的Collection集合

2020-10-15  本文已影响0人  abboo

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

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

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方法的时候不能有重复的元素,否则会抛出异常
上一篇下一篇

猜你喜欢

热点阅读