精华内容
下载资源
问答
  • Java集合Stream类filter的使用

    万次阅读 多人点赞 2018-05-11 11:49:42
    之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤。这篇文章使用同样是JDK1.8新加入的Stream中filter方法来实现同样的效果。

    之前的Java集合中removeIf的使用一文写了使用removeIf来实现按条件对集合进行过滤。这篇文章使用同样是JDK1.8新加入的Streamfilter方法来实现同样的效果。并且在实际项目中通常使用filter更多。关于Stream的详细介绍参见Java 8系列之Stream的基本语法详解
    同样的场景:你是公司某个岗位的HR,收到了大量的简历,为了节约时间,现需按照一点规则过滤一下这些简历。比如要经常熬夜加班,所以只招收男性

    //求职者的实体类
    public class Person {
        private String name;//姓名
        private Integer age;//年龄
        private String gender;//性别
    
        ...
        //省略构造方法和getter、setter方法
        ...
    
        //重写toString,方便观看结果
        @Override
        public String toString() {
            return "Person{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", gender='" + gender + '\'' +
                    '}';
        }
    }
    

    这里就不展示使用传统Iterator来进行过滤了,有需要做对比的可以参见之前的Java集合中removeIf的使用
    使用Streamfilter进行过滤,只保留男性的操作:

    Collection<Person> collection = new ArrayList();
    collection.add(new Person("张三", 22, "男"));
    collection.add(new Person("李四", 19, "女"));
    collection.add(new Person("王五", 34, "男"));
    collection.add(new Person("赵六", 30, "男"));
    collection.add(new Person("田七", 25, "女"));
    
    Stream<Person> personStream = collection.stream().filter(new Predicate<Person>() {
        @Override
        public boolean test(Person person) {
             return "男".equals(person.getGender());//只保留男性
        }
    });
    
    collection = personStream.collect(Collectors.toList());//将Stream转化为List
    System.out.println(collection.toString());//查看结果
    

    运行结果如下:

    [Person{name=‘张三’, age=22, gender=‘男’}, Person{name=‘王五’, age=34, gender=‘男’}, Person{name=‘赵六’, age=30, gender=‘男’}]
    Process finished with exit code 0

    上面的demo没有使用lambda表达式,下面的demo使用lambda来进一步精简代码:

    Collection<Person> collection = new ArrayList();
    collection.add(new Person("张三", 22, "男"));
    collection.add(new Person("李四", 19, "女"));
    collection.add(new Person("王五", 34, "男"));
    collection.add(new Person("赵六", 30, "男"));
    collection.add(new Person("田七", 25, "女"));
    
    Stream<Person> personStream = collection.stream().filter(
            person -> "男".equals(person.getGender())//只保留男性
    );
    
    collection = personStream.collect(Collectors.toList());//将Stream转化为List
    System.out.println(collection.toString());//查看结果
    

    效果和不用lambda是一样的。

    不过读者在使用filter时不要和removeIf弄混淆了:

    • removeIf中的test方法返回true代表当前元素会被过滤掉
    • filter中的test方法返回true代表当前元素会保留下来
    展开全文
  • Java集合

    千次阅读 多人点赞 2019-06-17 16:02:33
    Java集合类是一种特别有用的工具类,可用于存储数量不等的对象,并可以实现常用 的数据结构,如栈、队列等。除此之外,Java集合还可用于保存具有映射关系的关联 数组。Java集合大致可分为List、Set、Queue和Map四种...

    Java集合类是一种特别有用的工具类,可用于存储数量不等的对象,并可以实现常用 的数据结构,如栈、队列等。除此之外,Java集合还可用于保存具有映射关系的关联 数组。Java集合大致可分为List、Set、Queue和Map四种体系。

    List:代表有序、 重复的集合;
    Set:代表无序、不可重复的集合;
    Map:代表具有映射关系的集合;
    Queue:代表一种队列集合实现。(Java5之后)

    集合类主要负责保存、盛装其他数据,因此集合类也被称为容器 类,所有的集合类都位于 java.util包下。

    集合和数组的区别:数组元素既可以是基本类型的值,也可以是对象(实际上保存 的是对象的引用变量);而集合里只能保存对象(实际上只是保存对象的引用变量, 但通常习惯上认为集合里保存的是对象)。

    Java的集合类主要由两个接口派生而出: Collection和Map, Collection和Map是Java 集合框架的根接口,这两个接口又包含了一些子接口或实现类。如下所示是 Java集合 简单结构图
    在这里插入图片描述
    集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:

    1、接口:是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象

    2、实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。

    3、算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
    除了集合,该框架也定义了几个 Map 接口和类。Map 里存储的是键/值对。尽管 Map 不是集合,但是它们完全整合在集合中。

    集合框架体系如图所示
    在这里插入图片描述
    Collection接口:Collection 是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素, Java不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。Collection 接口存储一组不唯一,无序的对象。

    List接口:List接口是一个有序的 Collection,使用此接口能够精确的控制每个元素插入的位置,能够通过索引(元素在List中位置,类似于数组的下标)来访问List中的元素,第一个元素的索引为 0,而且允许有相同的元素。List 接口存储一组不唯一,有序(插入顺序)的对象。

    Set:Set 具有与 Collection 完全一样的接口,只是行为上不同,Set 不保存重复的元素。Set 接口存储一组唯一,无序的对象。

    SortedSet:继承于Set保存有序的集合。

    Map:Map 接口存储一组键值对象,提供key(键)到value(值)的映射。

    Map.Entry:描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。

    SortedMap:继承于 Map,使 Key 保持在升序排列。
    Enumeration:这是一个传统的接口和定义的方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器取代。

    Set和List的区别

    1.Set 接口实例存储的是无序的,不重复的数据。List 接口实例存储的是有序的,可以重复的元素。

    2.Set检索效率低下,删除和插入效率高,插入和删除不会引起元素位置改变<实现类有HashSet,TreeSet>

    3.List和数组类似,可以动态增长,根据实际存储的数据的长度自动增长List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素位置改变,<实现类有ArrayList,LinkedList,Vector>

    展开全文
  • java集合

    千次阅读 多人点赞 2019-02-26 23:12:34
    java集合 Java里面最重要,最常用也就是集合一部分了。能够用好集合和理解好集合对于做Java程序的开发拥有无比的好处,这篇博客就是给大件简单的讲解一下java集合 一:首先我们都知道的java集合有:list,set,map,那...

    java集合

    Java里面最重要,最常用也就是集合一部分了。能够用好集合和理解好集合对于做Java程序的开发拥有无比的好处,这篇博客就是给大件简单的讲解一下java集合

    一:首先我们都知道的java集合有:list,set,map,那其中的list,set,queue都是继承与collection接口的,而map与collection一点关系都没有哦,千万不要记混淆了,collection又是继承了iterable。
    先来说说集合的老大iterable:

    1:实现iterable接口的类可以拥有增强for循环(其实这里的增强for循环就是指的foreach)
    2:实现iterable接口的集合类必须提供一个名为iterator()的方法,该方法的返回值为iterator.

    二:接下来即使collection下面的集合:
    一 List:
    1:list接口下面有:ArrayList,LinkedList,vector
    2:list集合的优点:1:可以添加重复的元素,2:有顺序的集合
    3:ArrayList集合:
    1:查询快,添加,删除和修改慢,除非是在末端进行,轻量级,线程不安全
    (对于我自己来说最常用的还是ArrayList,其实对于它的增删改慢在实际的开发中我们都是增删改数据库的数据,所以和ArrayList没有什么关系)
    4:LinkedList集合:
    1:增加,删除和修改快,查询慢
    可以看出来的是ArrayList和LinkedList它们两个之间的其实就是相反的,ArrayList的缺点到LinkedList这里就成了它的优点

    二 Set:
    1:Set集合下面有:HashSet,TreeSet,LinkedHashSet
    2:Set集合的优点:1:不保存重复的元素,2:有顺序
    3:HashSet集合:
    1:速度是最快的(这里没有说什么速度最快,那就是默认所有都是最快的!),没有明显的顺序保存元素。
    2:集合元素可以是null,但只能放入一个null
    3:采用哈希算法来实现Set接口, 唯一性保证:重复对象equals方法返回为true ,重复对象hashCode方法返回相同的整 数 ,不同对象 哈希码 尽量保证不同(提高效率)。
    4:TreeSet集合:
    1:按照比较 结果的升序保存对象
    5:LinkedHashSet集合:
    1:按照被添加的顺序保存对象

    三 Queue:
    1:Queue 翻译过来就是队列:主要特点是 先进先出
    2:LinkedList提供了方法以支持队列的行为,且实现了Queue接口,因此ListedList可以用作Queue的一种实现

    三:Map集合:
    Map集合下面有:HashMap,TreeMap和LinkedHashMap
    一:HashMap集合:
    提供了最快的访问技术,没有按照明显的顺序保存元素(这里和HashSet是差不多的)
    二:TreeMap集合:
    1:无序,不允许重复(无序指元素顺序与添加顺序不一致)
    2:TreeMap集合默认会对键进行排序,所以键必须实现自然排序和定制排序中的一种
    三:LinkedHashMap集合:
    1:按照插入顺序保存键,同时还保存了HashMap的保存速度

    一个关于java集合之间的题目,我就写在下面:
    1:iterable的方法remove()和Collection的remove(Object)有什么区别?
    最简单的应该就是一个是有参数的一个无参数,在回答这个问题之前应该先了解两个集合的删除方法有什么不同。
    iterable的remove():改方法可以删除由next()最新返回的项
    Collection的remove(Object):从集合中删除指定的某项
    区别:
    1:性能方面:
    Collection的remove方法必须首先找出要被删除的项,找到该项的位置采用的是单链表结构查询,单链表查询效率比较 低,需要从集合中一个一个遍历才能找到该对象;
    Iterator的remove方法结合next()方法使用,比如集合中每隔一项删除一项,Iterator的remove()效率更高
    2:容错方面:
    在使用Iterator遍历时,如果使用Collection的remove则会报异常,会出现ConcurrentModificationException,因为集合中对象的个数会改变而Iterator 内部对象的个数不会,不一致则会出现该异常
    在使用Iterator遍历时,不会报错,因为iterator内部的对象个数和原来集合中对象的个数会保持一致

    OK,今天的java集合就写到这里吧。

    展开全文
  • Java 集合

    千次阅读 2015-11-03 18:14:18
    Java集合开发相关的文章列表: java集合概览 几幅图让你认识Java集合 java中List、Array、Map、Set等集合相互转换的最佳方法 关于Java集合最被关注的10 个问题 本列表会不断更新
    展开全文
  • java集合——HashSet的用法

    万次阅读 多人点赞 2016-08-08 16:28:21
    java集合——HashSet的用法 一、HashSet的构造 HashSet hashset=new HashSet(); 二、HashSet添加元素 //向hashset中添加一个字符串 hashset.add("abc"); //向hashset中添加一个整数 hashset.add(1); //向...
  • java集合超详解

    万次阅读 多人点赞 2018-08-03 21:28:15
    一、集合大纲 1.集合和数组的区别: 2.Collection集合的方法: 3.常用集合的分类: Collection 接口的接口 对象的集合(单列集合) ├——-List 接口:元素按进入先后有序保存,可重复 │——...
  • JAVA集合

    万次阅读 2016-09-17 19:34:05
    Set集合 一、感性认知: 1、对比List集合来看Set集合,感受差异化,想象距离任意情景,比较何时用List集合,何时用 Set集合。 二、理性认知: 1、集合结构图 a、java.util.Collection[I] java.util.List[I] ...
  • Java集合中List,Set以及Map等集合体系详解(史上最全)

    万次阅读 多人点赞 2018-06-12 14:09:24
    Java集合中List,Set以及Map等集合体系详解(史上最全) 概述: List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口 Set下有HashSet,LinkedHashSet,TreeSet List下有ArrayList,Vector,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 201,212
精华内容 80,484
关键字:

java集合

java 订阅