集合2

Queue 接口 :
队列:是访问受限的线性表。

先进先出的数据结构。

---------------------------------

PriorityQueue
按照一定的优先级排序。
默认 Comparable升序排序
也可以自己 指定 Comparator


---------------------------------------
Deque接口:
双端队列
可以 模拟 队列


------------------------------------
Map接口:
双列存储,键值对。
键是唯一的。


------------------------------------
HashMap 和 Hashtable

Hashtable :线程安全的,性能低
HashMap :键唯一,可以存 null键 ,null值;

LinkedHashMap:
按照 添加的顺序 来维护;

TreeMap:
默认 自然升序排序
也可以 按照 自己指定的 方式排序。

HashMap > LinkedHashMap > TreeMap

-------------------------------------------


单列: Collection
数据重复:List
ArrayList: 查询 ,遍历
LinkedList: 插入 ,删除

数据不重复: Set
只考虑唯一:HashSet (hashCode ,equals)
顺序:
LinkedHashSet : 添加顺序
TreeSet: 自己维护顺序
队列: Queue
栈: Deque

双列: Map

----------------------------------------------
Stream

对流中的数据 进行 聚集 运算。

统计

一次性的运算
速度快

末端方法:
得到结果后 就释放了。

中间方法:
会得到一个“新”的流 ,可以继续其它方法。

//---------------------------------------------------------------------------------------------------------------------------------------------------

 Collections 类中的常用方法

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**示例:Collections*/
public class TestCollections {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        //
        Collections.addAll(list, "aa","cc","bb");
        System.out.println(list);
        //自然 升序
        Collections.sort(list);
        System.out.println(list);
        //指定比较器
//        Collections.sort(list, (s1,s2)->s2.compareTo(s1));
        System.out.println(list);
        //查找参数 元素 在集合中 出现的索引 , 前提   升序 排序
//        System.out.println(Collections.binarySearch(list, "aaa"));
        //集合 中 最小 的 和 最大 
        System.out.println(Collections.min(list));
        System.out.println(Collections.max(list));
        //
        list.add("aa");
        System.out.println(list);
        //查找 参数 元素 在集合 中 出现的 次数 ,不存在  0
        System.out.println(Collections.frequency(list, "aa"));//2
        //对集合元素进行反转
        Collections.reverse(list);
        System.out.println(list);
        //集合元素的洗牌
        Collections.shuffle(list);
        System.out.println(list);
        //集合的填充 ,用 参数 来替换 集合 中的每个元素。
        Collections.fill(list, "xxx");
        System.out.println(list);
        
    }

}
//练习:Collections 找出集合中的重复元素
public class TestCollections1 {

    public static void main(String[] args) {
        // 集合
        List<String> list = new ArrayList<>();
        Collections.addAll(list, "张三","李四","李四","李四","李四","王五","王五");
        //
        Set<String> set = new HashSet<>(); 
        set.addAll(list); //将list放在HashSet 不重复集合中
        //
        System.out.println("-- 重复名单 --");
        for(String s : set) {
            if(Collections.frequency(list, s) > 1) {
                System.out.println(s);
            }
        }

    }

}

Dequal 双端队列

(可以模拟 栈和队列)

package day15;

import java.util.ArrayDeque;
import java.util.Deque;

public class TestDeque1 {

    public static void main(String[] args) {
        // Deque 双端队列 
        //模拟 队列
/*        Deque<String> d = new ArrayDeque<>();
        d.add("aa");
        d.addLast("bb");
        d.offer("cc");
        d.offerLast("dd");
        System.out.println(d);
        //出队
        while(d.size() > 0) {
//            System.out.println(d.poll());
            System.out.println(d.pollFirst());
        }*/
        
        //----------------栈-------------------------------------
        
        Deque<String> d = new ArrayDeque<>();
        //入栈
        d.addFirst("aa");
        d.offerFirst("bb");
        d.addFirst("cc");
        d.push("dd");
        //出栈
        while(d.size() > 0) {
//            System.out.println(d.pollFirst());
            System.out.println(d.pop());
        }
        

    }

}

Map基本操作

public class TestMap1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Map<Integer,String> map = new HashMap<>();
        //存信息,添加
        map.put(1, "张三");
        map.put(2, "李四");
        map.put(3, "王五");
        System.out.println(map);
        //获得 键值对 的数量
        System.out.println(map.size());//3
        //键值对的数目 为0  true
        System.out.println(map.isEmpty());//false
        //查看 指定 的键  在 集合 中  是否 存在;
        System.out.println(map.containsKey(2));
        //查看 指定 的值在 集合 中  是否 存在;
        System.out.println(map.containsValue("李四"));
        //根据 指定的键值对删除  
        map.remove(2);
        System.out.println(map);
        //获得 键的集合 Set
        Set<Integer> set = map.keySet();
        System.out.println(set);
        //值的集合
        Collection<String> c = map.values();
        System.out.println(c);
        //
//        map.clear();
//        System.out.println(map.isEmpty());
        //---------------------------------------
        System.out.println(map);
        //HashMap支持 存储入 null键 和 null值。
        map.put(null, null);
        System.out.println(map);
        //键是唯一 的,覆盖了之前的键值对
        map.put(1, "赵六");
        System.out.println(map);
    }

}


//遍历Map键值对操作
import
java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.function.BiConsumer; public class TestMap2 { public static void main(String[] args) { Map<Integer,String> map = new HashMap<>(); //存信息,添加 map.put(1, "张三"); map.put(2, "李四"); map.put(3, "王五"); //遍历 //1. map.forEach(new BiConsumer<Integer, String>() { @Override public void accept(Integer t, String u) { System.out.println(t + "," + u); } }); map.forEach((k,v)-> System.out.println(k+":"+v)); //2.iterator

//        迭代器(Iterator)

//        迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

//        Java中的Iterator功能比较简单,并且只能单向移动

        map.keySet().iterator().forEachRemaining(System.out::println);
        map.values().iterator().forEachRemaining(System.out::println);
        //3.获得了键值对  的集合
        Set<Entry<Integer,String>> set = map.entrySet();
        //输出键值对
        set.forEach(e->System.out.println(e));
        set.forEach(e->System.out.println(e.getKey()+","+e.getValue()));
        
        //3.
        Set<Entry<Integer,String>> set1 = map.entrySet();
        //键值对的迭代器
        Iterator<Entry<Integer,String>> i = set1.iterator();
        i.forEachRemaining(System.out::println);
        
        //-----------------------------------------------------
//        Set<String> s = new HashSet<>();
//        s.add("aa");
        
    
        
    }

}

练习Map

import java.util.HashMap;
import java.util.Map;

public class TestMap3 {

    public static void main(String[] args) {
        //Map
        Map<String,String> map = new HashMap<>();
        map.put("PBC", "农业银行");
        map.put("ICBC", "工商银行");
        map.put("BC", "中国银行");
        map.put("CBC", "建设银行");
        //遍历
        map.keySet().forEach(System.out::println);
        map.values().forEach(System.out::println);
        map.forEach((k,v)->System.out.println(k+"="+v));
        //根据键 获得 值
        System.out.println("BC对应的银行是:" + map.get("BC"));
        //
        System.out.println(map.size());
        //
        map.remove("BC");
        System.out.println(map.containsKey("BC"));
        //
        map.keySet().iterator().forEachRemaining(System.out::println);
        map.values().iterator().forEachRemaining(System.out::println);
        map.entrySet().iterator().forEachRemaining(System.out::println);
    }

}
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

class Dog{
    private String name;
    private String type;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Dog(String name, String type, int age) {
        super();
        this.name = name;
        this.type = type;
        this.age = age;
    }
    public Dog() {
        super();
        // TODO Auto-generated constructor stub
    }
    @Override
    public String toString() {
        return "Dog [name=" + name + ", type=" + type + ", age=" + age + "]";
    }
    
}
public class TestMap4 {
    Map<String,Dog> dogs = new HashMap<>();
    {
        Dog d1 = new Dog("旺旺","拉布拉多",2);
        Dog d2 = new Dog("旺财","金毛",3);
        Dog d3 = new Dog("美美","吉娃娃",1);
        dogs.put(d1.getName(), d1);
        dogs.put(d2.getName(), d2);
        dogs.put(d3.getName(), d3);
        
    }
    public void queryDog(String name) {
        //1
    /*    dogs.entrySet().iterator().forEachRemaining(e->{
            if(e.getKey().equals(name)) {
                System.out.println(e.getValue());
            }
        });*/
        //2
        System.out.println(dogs.get(name));
        
    }
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("--输入查找的狗狗的昵称:");
        String name = input.next();
        new TestMap4().queryDog(name);

    }

}

Predicate

import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

class Student{
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    public Student() {
        super();
        // TODO Auto-generated constructor stub
    }
    @Override
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
    
}
public class TestPredicate1 {

    public void showStu(List<Student> stus,Predicate<Student> p) {
        for(Student stu:stus) {
            if(p.test(stu)) {
                System.out.println(stu);
            }
        }
    }
    public static void main(String[] args) {
        List<Student> stus = new ArrayList<>();
        stus.add(new Student("zhangsan",44));
        stus.add(new Student("lisi",55));
        stus.add(new Student("wangwu",22));
        /*new TestPredicate1().showStu(stus, new Predicate<Student>() {
            
            @Override
            public boolean test(Student t) {
                return t.getAge() > 30 && t.getName().contains("g");
            }
        });*/
        
        new TestPredicate1().showStu(stus, t->t.getAge() > 30 && t.getName().contains("g"));
    }

}

PriorityQueue筛选器

import java.util.PriorityQueue;
import java.util.Queue;

public class TestPriorityQueue {

    public static void main(String[] args) {
        // 优先队列
        Queue<Integer> q = new PriorityQueue<>((n1,n2)->n2 - n1);
        q.add(22);
        q.add(55);
        q.add(11);
//        q.forEach(System.out::println);
        while(q.size() > 0) {
            System.out.println(q.poll());
        }
    }

}

Queue 队列

package day15;

import java.util.LinkedList;
import java.util.Queue;

public class TestQueue1 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Queue<String> q = new LinkedList<>();
        //向 队尾  加(入队)
        //  成功 true,失败 异常
        q.add("aa");
        q.add("bb");
        //失败 false
        q.offer("cc");
        q.forEach(System.out::println);
        //出队---------------------------
    /*    System.out.println(q.remove());
        System.out.println(q.remove());
        //失败 返回 null
        System.out.println(q.poll());*/
        //队列 不允许  加入 null,但是 LinkedList特殊 可以加入 null,但建议不要加null
//        q.offer(null);
        //循环出队 -----------------------------------
        System.out.println("-----------------------");
        while(q.size() > 0) {
            System.out.println(q.poll());//移除
//            System.out.println(q.peek());
        }
        
    }

}
package day15;

import java.util.ArrayDeque;
import java.util.Queue;

/**练习:队列*/
class User{
    private int no;
    private String name;
    
    public void setNo(int no) {
        this.no = no;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getNo() {
        return no;
    }
    public String getName() {
        return name;
    }
    public User(String name) {
        super();
        this.name = name;
    }
    @Override
    public String toString() {
        return no + "," + name;
    }
    
}
public class TestQueue2 {

    public static void main(String[] args) {
        Queue<User> users = new ArrayDeque<>();
        User u1 = new User("张三");
        User u2 = new User("李四");
        User u3 = new User("王五");
        User u4 = new User("赵六");
        User u5 = new User("周七");
        User [] us = {u1,u2,u3,u4,u5};
        for(int i = 0; i < us.length; i++) {
            us[i].setNo(i+1);//分配递增的编号
            users.offer(us[i]);//入队
        }
        while(users.size() >0) {
            //出队
            System.out.println("* " + users.poll() + "办理完了业务");
            if(users.size() >0) {
                System.out.println("剩余:");
                users.forEach(System.out::println);
            }else {
                System.out.println("后边没有队伍了");
                System.out.println("全部办理完成");
            }
        }

    }

}

Stream 流

import java.util.function.IntPredicate;
import java.util.stream.IntStream;

public class TestStream {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        IntStream is = IntStream.builder().add(11).add(22).add(33).add(55).build();
        //末端方法-------------------------------------------
//        System.out.println(is.max().getAsInt());
//        System.out.println(is.min().getAsInt());
//        System.out.println(is.sum());
//        System.out.println(is.average().getAsDouble());
//        System.out.println(is.count());
        //all 所有 的 数据 都满足条件 返回 true
    /*    System.out.println(is.allMatch(new IntPredicate() {
            
            @Override
            public boolean test(int value) {
                
                return value > 20;
            }
        }));*/
//        System.out.println(is.allMatch(v->v > 10));
        //any 流中 只要 有 一个 元素 满足 条件 就 返回 true
//        System.out.println(is.anyMatch(v-> v > 20));
        //------------------中间方法--------------------------------
        is.filter(v-> v > 20).forEach(System.out::println);
        
        
    }

}
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class TestStream2 {

    public static void main(String[] args) {
        // 
        List<Integer> list = new ArrayList<>();
        Collections.addAll(list, 11,454,44,6878,23);
        list.stream().filter(v-> v < 55).forEach(System.out::println);
        System.out.println(list.stream().filter(v->v<55).count());
        //
        list.stream().forEach(System.out::println);

        
    }

}
import java.util.List;
import java.util.function.Predicate;

class Book{
    private String name;
    private double price;
    private String author;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public Book(String name, double price, String author) {
        super();
        this.name = name;
        this.price = price;
        this.author = author;
    }
    public Book() {
        super();
        // TODO Auto-generated constructor stub
    }
    @Override
    public String toString() {
        return "Book [name=" + name + ", price=" + price + ", author=" + author + "]";
    }
    
}
public class TestStream3 {
    
    public void bookInfo(List<Book> books , Predicate<Book> p) {
        /*books.forEach(e->{
            if(p.test(e)) {
                System.out.println(e);
            }
        });*/
        for(Book book : books) {
            if(p.test(book)) {
                System.out.println(book);
            }
        }
    }
    public int bookCount(List<Book> books , Predicate<Book> p) {
        int count = 0;
        for(Book book : books) {
            if(p.test(book)) {
                count++;
            }
        }
        return count;
    }
    
    public static void main(String[] args) {
        

    }

}
原文地址:https://www.cnblogs.com/fax1996/p/9489475.html