Java 集合(泛型 Stream)

1. 泛型

  • JDK5开始出现了泛型的使用
  • 泛型符号 可以应用在 类,接口,方法 的声明处,起到一个占位符的作用,先占个位置 ,给引用类型占个位置;
  • 泛型符号 名称和个数无要求 ; T type E element K key V value
  • 泛型符号出现在类的声明处和接口的声明处 都可以当成已知类型来进行使用;
  • 当泛型符号不指定的时候 统统当成Object类型来用

1.1.泛型类

  • 类的声明处有泛型符号

泛型类

//泛型类  占位符
public class CustomGeneric1<A, B, C> {
    //当成已知类型来进行使用,凡是需要数据类型的地方 A B C都可以直接用
    private A a;
    private B b;
    private C c;
}

1.2.泛型接口

  • 泛型符号应用 接口的声明处

接口的声明

//泛型接口
public interface Inter1<T, E> {
    //泛型符号在本接口中 当成已知类型来用
    T methodT(T t);
    E methodE(E e);
}

实现1

//1, 实现类直接确定接口中的泛型符号的类型
public class Inter1Impl1 implements Inter1<String, Integer> {
}

实现2

//2, 泛型符号如果不指定 统统当成Object来看
public class Inter1Impl2 implements Inter1 {
}

实现3

//3, 实现类继续带上泛型符号
public class Inter1Impl3<T, E> implements Inter1<T, E> {
}   

1.3.泛型方法

  • 注意点:静态方法中不能出现 泛型类的泛型符号
  • 只在方法中应用了泛型符号

注意点:

/**
* 静态方法中不能出现 泛型类的泛型符号
*public static void method2(T t) {
}

1.4.泛型上下限

  • ?:通配符 匹配任意类型
  • 泛型上限:? extends Animal:可以是Animal类型 或者Animal的子类型
  • 泛型的下限:? super Animal:可以是Animal类型 或者Animal的父类型
public class Feeder {
    /**
     * ?:通配符  匹配任意类型
     * ? extends Animal:可以是Animal类型 或者Animal的子类型
     * *** 泛型的上限
     */
    public void feed(List<? extends Animal> animal) {
    }

    /**
     * ? super Animal:可以是Animal类型 或者Animal的父类型
     * ***泛型的下限
     */
    public void feed2(List<? super Animal> animal) {
    }
}

2. LinkedList 特有的方法

	LinkedList<Integer> linkedList = new LinkedList<>();
//获取双向链表中第一个集合元素对象
	linkedList.getFirst();
//获取双向链表中最后一个集合元素对象
	linkedList.getLast();
//删除双向链表中第一个集合元素对象
	linkedList.removeFirst();
//删除双向链表中最后一个集合元素对象
	linkedList.removeLast();

3. TreeMap和TreeSet特有的方法

	TreeMap<Integer, String> treeMap = new TreeMap<>();
//获取第一个key对象 最小的那个
        Integer firstKey = treeMap.firstKey();
// 获取第一个节点对象
        Map.Entry<Integer, String> entry = treeMap.firstEntry();
//获取最后一个key对象 最大的那个
        Integer lastKey = treeMap.lastKey();
// 获取最后一个节点对象
 		Map.Entry<Integer, String> lastEntry = treeMap.lastEntry();

4. Collections工具方法

//一次性添加多个对象 到指定的集合中
        Collections.addAll(arrayList, "java4", "java1", "java2", "java3");
//倒置 反转
		Collections.reverse(List);
//重新洗牌 顺序打乱
        Collections.shuffle(arrayList);

5. Stream流的操作

/*中间操作方法:只要方法的返回值类型是Stream类型 都属于中间操作方法
	惰性操作方法 只有碰到终止操作方法 它才会执行
    filter() 过滤
    map() 映射
    sorted() 排序
    limit() 限制流中的个数
    peek() 查看流中数据
    终止操作方法:只要方法的返回值类型不是Stream类型 都属于终止操作方法
    collect:收集流中的数据
    count:统计流中数据的 个数
    reduce:对流中的数据进行合并,合并为一个值
    Stream对象是一次性 不能重复操作*/
	ArrayList<String> arrayList = new ArrayList<>();
        //一次性添加多个对象 到指定的集合中
        Collections.addAll(arrayList, "java4", "java1", "java2", "java3");
        //简化写法
        System.out.println(arrayList.stream().filter((s) -> {
            return !s.equals("java1");
        }).map((s) -> {
            return s + "JAVA";
        }).limit(3).sorted().peek((s) -> {
		//System.out.println(s);
        }).count());
posted @ 2023-03-16 22:03  VIoleng  阅读(137)  评论(0)    收藏  举报