• 集合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) {
            
    
        }
    
    }
  • 相关阅读:
    windows下 删除指定文件夹里面一周前的所有文件和文件夹的bat
    freeswitch 把SIP注册信息数据库从SQLITE 改为MYSQL的方法
    memcached+Mysql(主从)
    Linux下的MySQL主主复制
    RabbitMQ php 使用
    如果你写PHP, 请多注意自己是否有良好的习惯
    MySQL主从配置的一些总结
    Mongodb与mysql语法比较
    Yii框架tips
    Windows下Python添加MySQLdb扩展模块
  • 原文地址:https://www.cnblogs.com/fax1996/p/9489475.html
Copyright © 2020-2023  润新知