十四,Collection
- 
Consumer : 消费型接口 : 有来无回 void accept(T t);
 - 
Supplier : 供给型接口 : T get();
 - 
Function : 函数型接口 : 有来有往 R apply(T t);
 - 
Predicate : 断言型接口 : 条件 boolean test(T t);
 - 
内部迭代 : 循环在底层.外部迭代 : 自己写循环
- 
// collection.stream() 串行流
// collection.parallelStream() 并行流
// default Stream<E> parallelStream()
// default Stream<E> stream()
collection.stream().forEach(new Consumer<Integer>(){
public void accept(Integer element){
System.out.println("element = " + element);
}
});
//boolean removeIf•(Predicate<? super E> filter)
// 如果存在就删除
collection.removeIf(new Predicate<Integer>() {
 
 - 
 - 
Collections : 集合的工具类
List
- 
List<User> list = new ArrayList<>();
list.add(new User("lisi0", 20));
// void add(int index, E element)
//在列表的指定位置插入指定元素(可选操作)。
list.add(2, new User("xiaoming", 18));
//E get(int index)
//返回列表中指定位置的元素。
User user = list.get(2);
//int indexOf(Object o)
//返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
int index = list.indexOf(new User("xiaoming", 18));
//int lastIndexOf(Object o)
//返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
//E remove(int index) 获取并移除
//移除列表中指定位置的元素(可选操作)。
User remove = list.remove(2);
//E set(int index, E element)
//用指定元素替换列表中指定位置的元素(可选操作)。
User setUser = list.set(2, new User("laowang", 22));
//List<E> subList(int fromIndex, int toIndex)
//返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。
List<User> list1 = list.subList(1, 5);
list.forEach(System.out::println); 
 - 
 
迭代器listIterator
// ListIterator<E> listIterator()
//返回此列表元素的列表迭代器(按适当顺序)。
//ListIterator<E> listIterator(int index)
//返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
        for (ListIterator<String> listIterator = list.listIterator(); listIterator.hasNext(); ) {
            String s = listIterator.next();
            if ("bbb".equals(s)) {
                listIterator.add("eee");
            }
        }
ArrayList
    // void trimToSize()
    //将此 ArrayList 实例的容量调整为列表的当前大小。
    // Vector :
    Vector<String> vector = new Vector<>();
    //  int capacity()  理论容量
    //返回此向量的当前容量。
    // int size()  实际容量
    //返回此向量中的组件数
    System.out.println("vector.capacity() = " + vector.capacity());
    System.out.println("vector.size() = " + vector.size());
LinkedList
    LinkedList<String> linkedList = new LinkedList<>();
    //void addFirst(E e)
    //将指定元素插入此列表的开头。
    //void addLast(E e)
    //将指定元素添加到此列表的结尾。
    linkedList.addFirst("000");
    linkedList.addLast("666");
//E element()
//获取但不移除此列表的头(第一个元素)。
System.out.println("linkedList.element() = " +linkedList.element());
//E getFirst()
//返回此列表的第一个元素。
System.out.println("linkedList.getFirst() = " +linkedList.getFirst());
//E getLast()
//返回此列表的最后一个元素。
System.out.println("linkedList.getLast() = " +linkedList.getLast());
//  boolean offer(E e)
//  将指定元素添加到此列表的末尾(最后一个元素)。
//  boolean offerFirst(E e)
//  在此列表的开头插入指定的元素。
//  boolean offerLast(E e)
//  在此列表末尾插入指定的元素。
//  E peek()
//  获取但不移除此列表的头(第一个元素)。
//  E peekFirst()
//  获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。
//  E peekLast()
//  获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。
//  E poll()
//  获取并移除此列表的头(第一个元素)
//  E pollFirst()
//  获取并移除此列表的第一个元素;如果此列表为空,则返回 null。
//  E pollLast()
//  获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。
//  E removeFirst()
//  移除并返回此列表的第一个元素。
//  E removeLast()
//  移除并返回此列表的最后一个元素。
//  void push(E e)
//  将元素推入此列表所表示的堆栈。
linkedList.push("aaa");
//  E pop()
//  从此列表所表示的堆栈处弹出一个元素。
System.out.println("linkedList.pop() = " + linkedList.pop());
- 
@FunctionalInterface// 函数式接口的注解,函数式接口 : 抽象函数的个数 有且只有一个;
 
Set:元素唯一,不保证插入和取出数据一致
- 
HashSet:哈希表结构,线程不安全
- 
唯一原则:先使用 元素 的 hashCode函数进行比较 , 如果不同,直接存储;如果相同,则调用元素的 equals() 函数进行判断,如果不同直接存储,相同舍弃
 - 
LinkedHashSet : 哈希表 + 链表,保证插入顺序和取出顺序一致
 
 - 
 - 
TreeSet:二叉树结构,线程不安全,会对元素进行排序
- 
自然排序 : 要求 元素类型实现 Comparable<T> 接口
 - 
定制排序/自定义排序 : 创建TreeSet对象时需要提供 比较器对象
 - 
注意 : 两种排序同时存在,优先按 定制排序进行排序
 
 - 
 
TreeSet<Student> treeSet3 = new TreeSet<>(
// lambda表达式中,形参的类型是可以省略的
            (o1, o2) -> {
                // 年龄升序名字降序
                int num = o1.getAge().compareTo(o2.getAge());
                if (num == 0) {
                    return -o1.getName().compareTo(o2.getName());
                }
                return num;
            }
    );
reeSet3.forEach(    (student) -> {  
    System.out.println(student);    
                                 });
treeSet3.forEach(        
// 当形参只有一个参数时 , 小括号可以省略不写        
student -> {            System.out.println(student);        });   
// 当方法体只有一条语句时 , 大括号可以省略不写 , 同时去掉末尾分号 , 如果是return语句,return也要省略
treeSet3.forEach(student ->System.out.println(student));
// 当 lambda 表达式的 函数体已经有函数实现时,可以使用 函数引用
// 对象::函数名
//参刚好是被调用函数的参数
PrintStream out = System.out;
treeSet3.forEach(out::println);
treeSet3.forEach(System.out::println);
                    
                
                
            
        
浙公网安备 33010602011771号