精华内容
下载资源
问答
  • 常用的集合有哪些?比如List如何排序? Set、List、Map.png Java中常用的集合类 对于集合,大家都不陌生了,常见的集合接口Set、List、Map等,其中Set和List继承自Collection。 Collection是一组对象的集合...

      常用的集合类有哪些?比如List如何排序?

    Set、List、Map.png

    Java中常用的集合类

      对于集合,大家都不陌生了,常见的集合接口Set、List、Map等,其中Set和List继承自Collection

    Collection是一组对象的集合,而Map存储的方式不一样,他是以键值对的形式存放多个对象的。

    SetList又有区别,Set中的元素无序且不重复,而List中的元素则是有序且允许重复的。

    Set、List、Map都是接口类,定义的是规范,具体使用时,还是需要其实现类的实例。一般我们见得比较多的就是HashSet、TreeSet、ArrayList、LinkedList、HashMap等,另外还有Vector、HashTable什么的,这个涉及了多线程中的线程安全以及性能问题,现在出场率比较低了。

    Set:HashSet、TreeSet

      说实话,就个人经历而言,Set的使用比较少,仅在对Map使用Entry的方式进行遍历的时候,用到过Set的实现类。

      关于去重:Set的中判断放入元素是否重复,都是基于对象的equals()方法的返回值来实现的。

      关于顺序和排序:其实作为无序的Set,本身应该是不具备排序功能的,因为根本就没有顺序。 HashSet对于元素的存储位置是取决放入对象的HashCode,是散列形式的;另外,还有一个名叫LinkedHashSet的实现类,除了使用HashCode来决定元素位置之外,同时还是用了链表来维护元素的次序(Linked),因此对其插入元素时,看起来是有序的;

    TreeSet,这个实现类没有接触过,以下资料为网络摘抄:

      TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。

      TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。 向TreeSet中加入的应该是同一个类的对象。TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0 自然排序 自然排序使用要排序元素的CompareTo(Object obj)方法来比较元素之间大小关系,然后将元素按照升序排列。

      Java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现了该接口的对象就可以比较大小。obj1.compareTo(obj2)方法如果返回0,则说明被比较的两个对象相等,如果返回一个正数,则表明obj1大于obj2,如果是 负数,则表明obj1小于obj2。如果我们将两个对象的equals方法总是返回true,则这两个对象的compareTo方法返回应该返回0。

     定制排序 自然排序是根据集合元素的大小,以升序排列,如果要定制排序,应该使用Comparator接口,实现 int compare(T o1,T o2)方法。 比较大小的2个接口.jpg 从上面的引文可以看出,对于集合的排序可以使用元素本身比较大小的方法(前提是实现了Comparable接口的对象);或者去实现Comparator接口的compare()方法来自定义一套比较大小的逻辑。

    List:ArrayList、LinkedList

      这2个应该是很常见的集合实现类了,一个是基于数组的原理存储元素,一个是使用链表的形式存储元素,具体的区别不在赘述。 总之,List是有顺序的,因此List肯定是可以排序的。考虑到这一点,Java创造者们早就给我们准备好了趁手的工具——Collections,长得有点像Set和List的お父さん(父亲),其实根本不是一个世界的人(类);

      关于Collections 这是官方提供的一个处理集合的工具方法的集合,本人最熟悉的就是他的sort()方法,对,就是这个排序用的方法,下面我们就来仔细看看这个便利的方法吧。

      sort()方法排序的本质其实也是借助Comparable接口和Comparator接口的实现,一般有2种用法:

        1、直接将需要排序的list作为参数传入,此时list中的对象必须实现了Comparable接口,然后sort会按升序的形式对元素进行排序;

        2、传入list作为第一个参数,同时追加一个Comparator的实现类作为第二个参数,然后sort方法会根据Comparator接口的实现类的逻辑,按升序进行排序; 这里可能有朋友会问,为什么都是升序没有降序。 其实所谓升或者降都是你自己规定的,sort()方法只是将比较结果为-1的放前面,0的放中间,1的放后面;如果你想实现降序排列,那就在Comparator方法的实现类中,逆转compare的返回结果就行了。

    Map:HashMap

      看到前面的Set和List的实现类里面前缀都有Array(数组实现),Hash(哈希),Linked(链表)这几种存储方式的实现,我脑洞了一下Map是不是也有ArrayMap呢?

      没有直接百度,而是直接在IDE中去new ArrayMap<K,V>(),发现编译通不过,看来1.7的JDK是不支持了。

      然后开启度娘模式发现,居然Android里面有提到,看来我也不算脑洞了。

      HashMap算是开发中使用得最多的了,很方法的键值对形式(内在是一个一个散列分布的Entry<K,V>,因此可是使用Set<Entry<K,V>>的方式遍历);

      本人对于HashMap基本上遍历多,排序少,从其前缀的Hash可以看出,其键值对的存放应该也是根据key的HashCode进行存放;因此,HashMap本身应该是无法排序的,所以跟Set一样,官方也没有提供对应的排序方法。

      不过,我们可以进行DIY,譬如把HashMap中的key存入可排序的list,进行排序,然后遍历的时候,通过list或许到key之后,再从Map获取值这样就按照key进行排序了。 如果要按照value进行排序就复杂一点,可以把Entry对象放进list,然后自己实现比较器,根据value进行排序。 嗯,还有更多更快更优的方法,大家都可以发散思维。

    另外提一嘴,Map中还有TreeMap和LinkedHashMap,其特点就跟Set中的那两位一样一样的。

    写在文尾的体会:

      不管是Set、List还是Map,根据其不同的特性,有不同的应用场景。

      对于排序的问题,根据各种实现类的前缀,了解实现中的元素存储方式,可以知道是有序还是无序。由此,可以知道排序是使用官方工具,还是需要自行实现对应的方法。

      不论官方还是DIY,总之要继续排序的基本原理都是借助Comparable接口和Comparator接口的实现,那么不论待处理的集合是怎样的,我们都有办法应对了。.

    文章转自:http://www.jianshu.com/p/820fd1b89c6a

     

    关于List是如何排序的,一段代码简单解释下:

    import java.util.ArrayList;
    
    import java.util.Collections;
    
    import java.util.List;
    
    public class Test_list_order {
    
        public static void main(String[] args) {
    
            List<Integer> list = new ArrayList<Integer>();
    
            list.add(1);
    
            list.add(4);
    
            list.add(9);
    
            list.add(3);
    
            list.add(2);
    
            list.add(11);
    
            Collections.sort(list);
    
            for (Integer i : list) {
    
                System.out.println(i);
    
            }
    
        }
    
    }

      打印结果如下:

    1
    2
    3
    4
    9
    11

     

    展开全文
  • List接口常规使用方法介绍和遍历方式的说明

    List接口的常规使用方法介绍和遍历方式的说明

    list思维导图
    思维导图文件点击这里

    展开全文
  • 今天我们就来了解一下,大数据技术常用的三种工具都有哪些。  大数据技术常用的三种工具都有哪些  一、Hadoop  Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是Hadoop是以一种可靠、高效、...

      数据是一个庞大而复杂的数据集合,它包含的内容有很多,比如,气候信息、公开信息、网购信息、网络日记、视频图像、病历等等。这些都是大数据的原始资料来源。这些原始数据量非常庞大,需要用专业的工具来进行处理,才能得到有价值的大数据。今天我们就来了解一下,大数据技术常用的三种工具都有哪些。

    大数据技术常用的工具有哪些

     

      大数据技术常用的三种工具都有哪些

     

      一、Hadoop

     

      Hadoop是一个能够对大量数据进行分布式处理的软件框架。但是Hadoop是以一种可靠、高效、可伸缩的方式进行处理的。Hadoop是可靠的,因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。Hadoop是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。Hadoop还是可伸缩的,能够处理PB级数据。此外,Hadoop依赖于社区服务器,因此它的成本比较低,任何人都可以使用。

     

      Hadoop是一个能够让用户轻松架构和使用的分布式计算平台。用户可以轻松地在Hadoop上开发和运行处理海量数据的应用程序。它主要有以下几个优点:

     

      ⒈高可靠性。Hadoop按位存储和处理数据的能力值得人们信赖。

     

      ⒉高扩展性。Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中。

     

      ⒊高效性。Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快。

     

      ⒋高容错性。Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配。

     

      Hadoop带有用Java语言编写的框架,因此运行在Linux生产平台上是非常理想的。Hadoop上的应用程序也可以使用其他语言编写,比如C++。

     

      二、HPCC

     

      HPCC,HighPerformanceComputingandCommunications(高性能计算与通信)的缩写。1993年,由美国科学、工程、技术联邦协调理事会向国会提交了"重大挑战项目:高性能计算与通信"的报告,也就是被称为HPCC计划的报告,即美国总统科学战略项目,其目的是通过加强研究与开发解决一批重要的科学与技术挑战问题。HPCC是美国实施信息高速公路而上实施的计划,该计划的实施将耗资百亿美元,其主要目标要达到:开发可扩展的计算系统及相关软件,以支持太位级网络传输性能,开发千兆比特网络技术,扩展研究和教育机构及网络连接能力。

     

      该项目主要由五部分组成:

     

      1、高性能计算机系统(HPCS),内容包括今后几代计算机系统的研究、系统设计工具、先进的典型系统及原有系统的评价等;

     

      2、先进软件技术与算法(ASTA),内容有巨大挑战问题的软件支撑、新算法设计、软件分支与工具、计算计算及高性能计算研究中心等;

     

      3、国家科研与教育网格(NREN),内容有中接站及10亿位级传输的研究与开发;

     

      4、基本研究与人类资源(BRHR),内容有基础研究、培训、教育及课程教材,被设计通过奖励调查者-开始的,长期的调查在可升级的高性能计算中来增加创新意识流,通过提高教育和高性能的计算训练和通信来加大熟练的和训练有素的人员的联营,和来提供必需的基础架构来支持这些调查和研究活动;

     

      5、信息基础结构技术和应用(IITA),目的在于保证美国在先进信息技术开发方面的地位。

     

      三、Storm

     

      Storm是自由的开源软件,一个分布式的、容错的实时计算系统。Storm可以非常可靠的处理庞大的数据流,用于处理Hadoop的批量数据。Storm很简单,支持许多种编程语言,使用起来非常有趣。Storm由Twitter开源而来,其它知名的应用企业包括Groupon、淘宝、支付宝、阿里巴巴、乐元素、Admaster等等。

     

      Storm有许多应用领域:实时分析、在线机器学习、不停顿的计算、分布式RPC(远过程调用协议,一种通过网络从远程计算机程序上请求服务)、ETL(Extraction-Transformation-Loading的缩写,即数据抽取、转换和加载)等等。Storm的处理速度惊人:经测试,每个节点每秒钟可以处理100万个数据元组。Storm是可扩展、容错,很容易设置和操作。

     

      大数据技术为决策提供依据,在政府、企业、科研项目等决策中扮演着重要的角色,在社会治理和企业管理中起到了不容忽视的作用 。

    展开全文
  • 关于Map接口中常用的方法: 1.Map接口和Collection接口没有继承关系。 2.Map集合以key和value(键值对)的方式存储数据。 key和value都是引用数据类型,存储的都是对象的内存地址。 key起到主导的地位,value是key的...

    关于Map接口中常用的方法:

    1、Map接口和Collection接口没有继承关系


    2、Map集合以key和value(键值对)的方式存储数据。

    key和value都是引用数据类型,存储的都是对象的内存地址。

    key起到主导的地位,value是key的一个附属品。


    3、Map集合中key是唯一的,即所有键值对的key部分都不相同。

    Map集合中不同键值对的value是可以相同的。
    例如:<key1, value1>,<key2, value1>。

    往Map集合中添加key已经存在的新键值对,会覆盖原来的键值对。


    4、Map接口中常用的方法:

    Map属于接口,接口中的方法为抽象方法,public abstract可以省略。

    (1)V put(K key, V value);
    向集合中添加元素。

    (2)V get(Object key);
    通过指定key获取value。

    (3)int size();
    获取集合中元素的个数。

    (4)void clear();
    清空集合,元素个数变为0。

    (5)boolean isEmpty();
    判断集合元素个数是否为0。

    (6)boolean containsKey(Object key);
    判断集合中是否包含指定key。

    (7)boolean containsValue(Object value);
    判断集合中是否包含指定value。

    注意:contains()方法底层都调用了equals()方法,再次强调存入集合元素的类一定要重写equals()方法。

    (8)Set<泛型> keySet();
    获取集合中所有的key,返回一个包含所有key元素的Set集合。

    (9)Collection values();
    获取集合中所有的value,返回一个包含所有value元素的Collection集合。

    (10)V remove(Object key);
    删除指定key的键值对。

    (11)default boolean replace(K key, V oldValue, V newValue);
    修改键值对<key, oldValue>的value为newValue。

    (12)Set<Map.Entry<K,V>> entrySet();
    将Map集合转换成Set集合。

    Map集合中每个键值对组成一个元素(key=value),存入Set集合,每个元素的类型是Map.Entry<K,V>。


    测试代码:

    import java.util.*;
    
    public class Test01 {
        public static void main(String[] args) {
            // 创建Map集合
            Map<Integer, String> hashMap = new HashMap<Integer, String>();  // 泛型指定键值对为<Integer, String>类型
    
            // 添加键值对
            hashMap.put(1, "张三");  // 这里的1会自动装箱成Integer类型
            hashMap.put(1, "张三三");  // 会添加成功吗?可以,但key不能相同,所以会覆盖原来的数据
            // 输出集合中元素的个数
            System.out.println(hashMap.size());  // 1
    
            hashMap.put(2, "张三三");  // 会添加成功吗?会的,键值对的value可以相同
            System.out.println(hashMap.size());  // 2
    
            // 删除集合中key为2的键值对
            hashMap.remove(2);
            System.out.println(hashMap.size());  // 1
    
            // 获取键值对key为1的value
            String value = hashMap.get(1);
            System.out.println(value);  // 张三三
    
            // 修改指定键值对的value值
            hashMap.replace(1, "张三三", "张三");
            System.out.println(hashMap.get(1));  // 张三
    
            hashMap.put(2, "李四");
            hashMap.put(3, "王五");
            hashMap.put(4, "赵六");
    
            // 是否包含指定key
            boolean cKey1 = hashMap.containsKey(2);
            boolean cKey2 = hashMap.containsKey(6);
            System.out.println(cKey1);  // true
            System.out.println(cKey2);  // false
    
            // 是否包含指定value
            boolean cValue1 = hashMap.containsValue("李四");
            boolean cValue2 = hashMap.containsValue("熊大");
            System.out.println(cValue1);  // true
            System.out.println(cValue2);  // false
    
            // 获取Map集合中所有的key
            Set<Integer> keys = hashMap.keySet();  // Map中所有的key没有相同的,故返回的是一个Set集合
            // 遍历Set集合
            for (Integer i : keys) {
                System.out.print(i + "   ");  // 1   2   3   4
            }
            System.out.println();
    
            // 获取Map集合中所有的value
            Collection<String> values = hashMap.values();  // Map中所有的value是可以相同的,故返回的是一个Collection集合
            // 遍历Collection集合
            for (String str : values) {
                System.out.print(str + "   ");  // 张三   李四   王五   赵六
            }
            System.out.println();
    
            // 把Map集合转换成Set集合
            Set<Map.Entry<Integer, String>> mapToSet = hashMap.entrySet();  // 每个键值对的key与value合并成“key=value”,组成Set的一个元素
            // 遍历转换后的Set集合
            for (Map.Entry<Integer, String> m : mapToSet) {
                System.out.print(m + "   ");  // 1=张三   2=李四   3=王五   4=赵六
            }
            System.out.println();
    
    		// Map集合的元素清空
            hashMap.clear();
            System.out.println(hashMap.isEmpty());  // true
            System.out.println(hashMap.size());  // 0
    
        }
    }
    

    展开全文
  • 图的实现方式有两种:一种是邻接矩阵,一种是邻接链表。 图(Graph)是一个用线或边连接在一起的顶点或结点的集合。 G = (V,E) //V:顶点,结点或点。E:边,弧或连线。 根据图的边是否有方向,可以把图分为有向...
  • 2.Properties有哪些基本用法? properties方法: 创建properties集合对象 Properties properties = new Properties(); 方法:properties.setProperty(“2”, “jack”); 作用:properties有专门
  • 在JAVA开发中,集合框架是我们最常用的存储多数据的方式,JAVA中常用的集合框架包括哪些呢? 主要包括List,Set,Map三种常用的集合,其中List和Set都继承了Conllection接口,Conlletions接口是用于操作集合的工具类 ...
  • Java 中的集合体系

    2021-04-12 23:54:47
    Collections 工具类有哪些常用方法?6.1 排序6.2 查找,替换 1. 什么是集合集合类是 Java 数据结构实现。它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作方法。集合类是可以往里面保存多个...
  • 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合是存储对象最常用的一种方式。 数组和集合都是容器。有哪些不同? 数组也可以存储对象,但长度是固定 ;而集合的...
  • 常用的集合有哪些?集合框架底层数据结构List接口迭代器Iterator是什么?Iterator的使用如何一边遍历一边移除Collection中的元素遍历List集合的方式ArrayList的优缺点如何实现数组和List之间的转换ArrayList 和 ...
  • 公司新人培训过程中,...6.集合的使用、日期API使用(不单是指Date 、Calender,需要会用新API)、 7.字符串String的常用方法及灵活使用、 8.再一个就是“比较”吧!引用类型对象比较、排序之类的方式方法。 9
  • 前言 ...这个时候LinkedList的优势便体现了出来,其底层由双向链表构成这点可以保证其修改,只需要针对指定节点的前后指向进行修改即可,那么LinkedList有哪些常用的方法呢?下面分类型进行汇总: 增加
  • java面试(集合

    2019-12-03 13:19:37
    1、java容器有哪些? ​ 常用容器的图录: ​ 2、Collection和Collections有什么区别? java.util.Collection是一...Collection接口的意义是为各种具体的集合提供了最大化的统一的操作方式,其直接继承的接口有L...
  • JAVA---集合类和迭代器

    2020-03-08 21:40:31
    存储对象的方式有哪些集合和数组 集合和数组有何不同? 数组虽然也可以存储对象,但长度是固定,可以存对象,也可以存储基本数据类型,但只能存相同数据类型数据 集合长度是可变,只能存对象,可以存...
  • (6)Java中的常用

    2018-03-21 21:31:50
    1.为什么需要包装类?包装类作用是? 因为Java是面向对象,但Java中基本数据类型不是面向对象,在实际使用过程中经常需要将基本数据转换成...2.将字符串“123”转换成基本类型数字的方式有哪些?通过Inte...
  • List遍历集合的三种方式? (1)for (2)foreach (3)iterator Iterator it = list.iterator(); while(it.hasNext()){ System.out.println(it.next...Collections的常用方法有哪些 Collection:集合类祖先类 Coll...
  • java面试要点集合

    2012-03-08 21:52:12
    7、jsp内置对象有哪些 北京环贸通科技有限公司 1、jsp两种跳转方式 2、struts标签库有哪些 3、struts主要类有哪几个 4、数据库事务有什么用、什么是ACID 航天信息有限公司 1。List与Set相同与不同之处,分别...
  • 编辑器列操作集合

    2018-05-16 08:25:11
    的对处理文本效率极高,的则是集成开发环境(IDE), 但他们都不会缺少一个高级功能:对列的编辑,下面对常用到的几款做一个汇总, 希望帮助需要的朋友,另,如果你觉得还有哪些常用的没有列举,欢迎联系我补充...
  • 实际上,Java 的集合库包含了线程安全集合和非线程安全集合,可以说 Java 的线程安全集合库就是按照前一篇说到的实例封闭、安全性的委托、组合这几个方式来实现的。这篇主要简单介绍 Java 集合库包含哪些常用的容器...
  • 目录介绍1 . Redis支持数据类型?String字符串Hash(哈希... Redis 有哪些架构模式?讲讲各自特点单机版主从复制哨兵集群(proxy 型):集群(直连型):5 . 什么是一致性哈希算法?什么是哈希槽?6 . Redis常用...
  • ——看别人整理的—— 1,对于数据库优化你什么办法? 2,强制提高网站性能什么办法?...5,常用的集合类是哪些哪些效率高?效率高的原因是什么? 6,权限管理,具体到增删改查,你如何控制页面显示...
  • 一面 1 自我介绍和项目 2 Java内存分区 3 Java对象回收方式,回收算法。 4 CMS和G1了解么,CMS解决什么问题,说一下回收过程。 ...9 它们使用方式和实现原理什么区别呢? 10 synchroniz.
  • 常用设计模式及 Java程序设计 第一章设计模式基础 一:什么是设计模式 在面向对象软件设计中,总是希望避免重复设计或尽可能少做重复设计。经验面向对象 设计者的确能做出良好设计,而新手则面对众多选择...
  • 1 asp和asp.net区别 2 C#里面包含哪些? 3 ADO 和 ADO.NET区别。... 8 在哪设置全局变量 9 session设置 10 有哪些集合类? 11 arrylist 和list区别 12 类包含哪些成员 13 索引器 14 常用控件属性 15
  • 线程池常用的有哪些? 线程池的工作原理 如何启动和销毁线程 什么是线程死锁 悲观锁和乐观锁,公平锁和非公平锁 Java集合原理 集合的类图 集合的数据结构实现 集合的效率 集合的遍历 更多面经,面试题加...
  • java高级应掌握内容

    2019-04-22 18:34:01
    常用的线程池有哪些?创建线程池需要的参数有哪些及含义?在深入还要掌握每种参数有哪些类型可选(比如队列有哪几种?区别是什么?拒绝策略有哪些并知道怎么使用?) 4、ThreadLocal类的使用:ThreadL...
  • RDD 与 普通的集合有哪些区别 RDD的属性 创建RDD方式 RDD的算子 RDD的Transformation的特点 常用的Transformation aggregateByKey ​filterByRange flatMapValues foldByKey combineByKey​ 常用的Action...
  • 其核心的组件基本覆盖了我们构建富客户端的常用的组件。 •从Ext 2开始,商业版(针对那些以盈利为目的的开发方)要收费了。这可能会影响一些他的应用前景。 •目前的最新版本为3.0,该版本是在2009年5月4日发布的。 ...
  • Hive数据类型和使用注意事项详解

    万次阅读 多人点赞 2018-05-11 00:56:35
    使用hive建表,首先要明白hive常用的数据类型有哪些,可以存储哪些类型的数据。其实Hive支持关系型数据库中的大多数基本数据类型,且同时支持关系型数据库中少见的3种集合数类型(STRUCT,MAP,ARRAY)。然而学习技术...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 242
精华内容 96
关键字:

常用的集合方式有哪些