天道酬勤,学无止境

Java核心API -- 7(Iterator迭代器、Comparable、Comparator比较器)

1. Iterator迭代器

    所有Collection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利。在java.util包下。

    1)Iterator定义有三个方法:

        ①boolean hasNext()方法:判断指针后面是否有元素。

        ②E next()方法:指针后移,并返回当前元素。E代表泛型,默认为Object类型。

        ③void remove()方法:在原集合中删除刚刚返回的元素。

    2)对于List集合而言,可以通过基于下标的get方法进行遍历;而iterator方法是针对Collection接口设计的,所以,所有实现了Collection接口的类,都可以使用Iterator实现迭代遍历。

    3)迭代器的使用方式:先问后拿。问:boolean hasNext()该方法询问迭代器当前集合是否还有元素;拿:E next()该方法会获取当前元素。迭代器的迭代方法是while循环量身定制的。

    4)迭代器中的删除问题:在迭代器迭代的过程中,我们不能通过“集合”的增删等操作,来改变该集合的元素数量!否则会引发迭代异常!若想删除迭代出来的元素,只能通过Iterator。迭代器在使用自己的remove()方法时,可以将刚刚获取的元素从集合中删除,但是不能重复调用两次!即在不迭代的情况下,不能在一个位置删两次。


    案例9:

        


2. Comparable和Comparator接口

    (1) Comparable接口:Comparable接口用于表示对象间的大小关系,我们需要实现Comparable接口,并重写compareTo()方法定义比较规则。

    (2) Collections.sort()方法:需要集合中的对象实现Comparable接口,从而可以调用其compareTo方法判断对象的大小,否则sort将无法判断。该方法会依次调用集合中每个元素的compareTo方法,并进行自然排序。 


    案例10:

        

        

        


    (3) Comparator接口:比较器。一旦Java类实现了Comparable,其比较逻辑就已经确定了,如果希望在排序中的操作按照“临时指定规则”,即自定义比较规则。可以采用Comparator接口回调方式。使用匿名类方式创建一个实例来定义比较器的方式很常见。

    Comparator比较器创建步骤:

        ①定义一个类并实现Comparator接口。

        ②实现接口中的抽象方法compare(E o1,E o2)。

        ③实例化这个比较器

        ④调用Collections的重载方法:sort(Collection c,Comparator comparator)进行排序。


    案例11:

        


3. Collection和Collentions的区别

    Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set 和List;

   Collections是个java.util下的类,是针对集合的帮助类,提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

 

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 精选 Java面试题附答案 ---- 字符串&集合面试题篇
    1. Java 中操作字符串都有哪些类?它们之间有什么区别? 操作字符串的类有:String、StringBuffer、StringBuilder。 String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象。 而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。 24万字Java面试手册PDF下载链接:https://shimo.im/docs/Wyj8QRpq39jkC3jD24万字Java面试手册PDF下载链接:https://shimo.im/docs/Wyj8QRpq39jkC3jD24万字Java面试手册PDF下载链接:https://shimo.im/docs/Wyj8QRpq39jkC3jD StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer, 所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。 2
  • Java 集合详解
    Java集合的理解一、集合的由来  通常,我们的程序需要根据程序运行时才知道创建多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是数组只能放统一类型的数据,而且其长度是固定的,那怎么办呢?集合便应运而生了! 为了对集合有个更加深入的了解,可以看我的这一篇文章:用 Java 数组来实现 ArrayList 集合 http://www.cnblogs.com/ysocean/p/6812674.html 二、集合是什么?  Java集合类存放于 java.util 包中,是一个用来存放对象的容器。注意:①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。   ②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。   ③、集合可以存放不同类型,不限数量的数据类型。 三、Java 集合框架图此图来源于:http://blog.csdn.net/u010887744/article/details/50575735大图可以点此访问:http://img.blog.csdn.net
  • Java 集合详解
    Java集合的理解 一、集合的由来   通常,我们的程序需要根据程序运行时才知道创建多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是数组只能放统一类型的数据,而且其长度是固定的,那怎么办呢?集合便应运而生了! 为了对集合有个更加深入的了解,可以看我的这一篇文章:用 Java 数组来实现 ArrayList 集合 http://www.cnblogs.com/ysocean/p/6812674.html 二、集合是什么?   Java集合类存放于 java.util 包中,是一个用来存放对象的容器。 注意:①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer 类后存入的,Java中每一种基本类型都有对应的引用类型。    ②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。    ③、集合可以存放不同类型,不限数量的数据类型。 三、Java 集合框架图 此图来源于:http://blog.csdn.net/u010887744/article/details/50575735 大图可以点此访问:http://img.blog.csdn.net
  • 全面接触Java集合框架
    Java平台提供了一个全新的集合框架。“集合框架”主要由一组用来操作对象的接口组成。不同接口描述一组不同数据类型。 Java 2集合框架图  集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。   抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。   实现类:8个实现类(实线表示),对接口的具体实现。  在很大程度上,一旦您理解了接口,您就理解了框架。虽然您总要创建接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上;因此,允许您更改基本的数据结构而不必改变其它代码。  · Collection 接口是一组允许重复的对象。  · Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。   · List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。  · Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。  · 容器中的元素类型都为Object。从容器取得元素时,必须把它转换成原来的类型。  Java 2简化集合框架图 集合接口  1.Collection 接口  用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。  (1) 单元素添加、删除操作: 
  • 2021精选 Java面试题附答案 ---- 字符串&集合面试题篇
    1. Java 中操作字符串都有哪些类?它们之间有什么区别? 操作字符串的类有:String、StringBuffer、StringBuilder。 String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象。 而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。 24万字Java面试手册PDF下载链接:https://shimo.im/docs/Wyj8QRpq39jkC3jD 24万字Java面试手册PDF下载 24万字Java面试手册PDF下载 StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer, 所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。 2. String、StringBuffer和StringBuilder区别(类似上一题) 1、数据可变和不可变
  • 【Java集合】逻辑结构超强、表达十分清晰的“Collection接口”及“List接口、Set接口”解析
    如标题,你将获得Collection、List、Set接口,以及其实现类ArrayList,LinkedList,HashSet、TreeSet类的讲解。众所周知,Java的学习就是从API里有啥、是啥、怎么用开始,再进阶至源码。 注意: 文章较长,但非常基础和实用。一句废话也没有,再说我也不喜欢搞那些花里胡哨的。这是我学习笔记,其中一定有一部分是你能够拿去做成你的笔记的。enjoy… 文章目录 诞生背景集合(Collection)接口方法迭代(遍历方法) 迭代器(Iterator)接口List接口List接口专属迭代器:ListIterator使用迭代器的注意事项几种遍历方式 ArrayList类核心方法遍历方式 LinkedList类核心方法 Set接口HashSet类自定义对象如何实现自动去重、保证唯一?LinkedHashSet类 TreeSet类自动排序的核心原理 集合体系 诞生背景 为啥要诞生集合,还得从数组的缺陷说起。 数组(存储同一种数据类型的集合容器)的特点: 只能存储同一种数据类型的数据,例如在同一个容器中不能同时存储int型和double型。一旦初始化,容量固定,容量不能扩容或缩减。数组中的元素与元素之间的内存地址是连续的。 注意: Object类型的数组可以存储任意类型的数据。 Object[] arr = new Object[10]; arr[1] =
  • HashSet vs TreeSet vs LinkedHashSet在添加重复值的基础上(HashSet vs TreeSet vs LinkedHashSet on basis of adding duplicate value)
    问题 我正在学习核心Java的心脏,即Collections 。 我想知道当我们在HashSet , TreeSet , LinkedHashSet添加重复元素时内部会发生什么。 无论条目被替换,忽略还是引发异常,程序都将终止。 一个子问题是,哪个问题的所有操作都具有相同或平均的时间复杂度 您的答复将不胜感激。 回答1 Java中的TreeSet,LinkedHashSet和HashSet是集合框架中的三个Set实现,并且像许多其他设置一样,它们也用于存储对象。 TreeSet的主要功能是排序,LinkedHashSet是插入顺序,HashSet只是用于存储对象的通用集合。 HashSet是使用Java中的HashMap实现的,而TreeSet是使用TreeMap实现的。 TreeSet是一个SortedSet实现,它允许它按Comparable或Comparator接口定义的排序顺序保留元素。 Comparable用于自然顺序排序,而Comparator用于对象的自定义顺序排序,可在创建TreeSet实例时提供。 无论如何,在看到TreeSet,LinkedHashSet和HashSet之间的区别之前,让我们看一下它们之间的一些相似之处: 1)重复项:这三个工具都有Set接口,这意味着它们不允许存储重复项。 2)线程安全性:HashSet
  • 集合框架の单列集合篇(历史最全)
    文章目录 一、集合概要二、集合API2.1、Collection集合常用API2.2、List集合API2.3、ArrayList2.4、LinkedList2.5、Vector 三、Set集合3.1、HashSet3.2、TreeSet 四、泛型4.1、方法泛型4.2、类泛型4.3、接口泛型4.4、泛型上、下限五、集合工具类Collections 一、集合概要    集合是用来存储对象的容器,和数组不同的地方在于集合只能存储引用类型数据(包括对象)。集合按照其存储结构,可以分为单列集合(java.util.Collection)和双列集合(java.util.Map)两大类,接下来学说一下Collection集合。 单列集合体系图如图所示: 二、集合API 2.1、Collection集合常用API 增加 ----- add(E e) 添加成功返回true,添加 失败返回false. ----- addAll(Collection c) 把一个集合 的元素添加到另外一个集合中去。 删除 ----- clear() 清空集合 ----- remove(Object o); 删除集合中元素 ----- removeAll(Collection c); //删除集合c1和集合c2的交集部分 ----- retainAll(Collection c); 保留c1集合与c2集合的交集部分
  • java集合(ArrayList,Vector,LinkedList,HashSet,TreeSet的功能详解)
    Hello,EveryBody.欢迎来到MySpace: 真心感谢一直以来有大家的帮助和陪伴,让我对java预言的学习愈加产生了浓厚的兴趣,相信我们的小团队会在陈老师的带领下逐渐壮大。 好了,赶快进入今天的正题吧,一个java中很重要的部分——集合。 说起集合,我们会潜意识里想到另外一个与之相近的名词——数组,OK!两者确实有相似之处,但也正是这点才是我们应该注意的地方,下面简单列出了两者的区别(具体功能的不同学习这篇文章后就会明白了):数组长度固定既可以存储基本数据类型,也能存储引用数据类型一个数组中的元素类型必一致集合长度可变只能存储引用数据类型一个集合中的元素类型可以是任意的引用类型一.集合概述Collection<E>父接口List<E>子接口ArrayList<E>类Vector<E>类LinkedList<E>类Set<E>子接口HashSet<E>类TreeSet<E>类 (List特点:存入顺序和取出顺序一致,存储的元素可以重复) (Set特点:元素的顺序无序且唯一,即无序性和唯一性)二.ArrayList类:(底层是Object数组) 1.一些基本的方法 (1)增:add及其重载; (2)删:remove(index)移除指定下标的元素,remove(Object)移除指定对象的元素,clear()移除所有; (3)改:set(index,Object); (4
  • java常用集合概述
    一、Collection集合 1、两种容器 A.数组(存放任意类型,长度固定) B.集合(存放对象类型,长度可变) 2、体系结构 单列集合 Collection List (ArrayList、LinkedList、Vector) Set(HashSet、LinkedHashSet、TreeSet) 3、常用方法 A.增 public boolean add(E) B.删 public void clear() public boolean remove(E) C.改 public Object[] toArray() public T[] toArray() D.查 public int size() public boolean isEmpty() 二、迭代器 Iterator 1、获取迭代器对象 Iterator iter = c.iterator(); //获取迭代器 2、使用迭代器方法 iter.hasNext(); //是否存在下一个元素 E e = iter.next(); //获取下一个元素 3、模板案例 //创建对象 Collection c = new ArrayList(); //添加数据 c.add(“Hello”); c.add(“world”); c.add(“good”); //获取迭代器 Iterator iter = c.iterator(); /
  • java集合梳理【6】— Collections接口源码解析
    文章目录一、Collections接口是做什么的?二、Collections源码之大类方法1.提供不可变集合2、提供同步的集合3、类型检查4.提供空集合或者迭代器5.提供singleton的集合或者迭代器三、从源码看其他常用方法1. Sort(排序)2. binarySearch(二分搜索)3. reverse(反转)4. Shuffling(混排)5. 交换(swap)6. 拷贝(copy)7. 返回最小的元素(min)8. 返回最大的元素(max)9. 旋转(Rotate)10. 替换所有元素(replaceAll)11.填充所有的元素(fill)12.查找子序列的索引位置(indexOfSubList)13.查找子序列的索引位置(lastIndexOfSubList)14.拷贝元素一样的list(nCopies)15.获取反转的比较器(reverseOrder)16.返回集合的枚举(enumration)17.返回枚举集合的list(list)18.返回某个元素出现的频率(frequency)19.判断是否有相同的元素(disjoint)20.批量添加(addAll)21.Map转成Set(newSetFromMap)22.转换成后进先出队列(asLifoQueue)四、总结一、Collections接口是做什么的?用官网文档的介绍:The polymorphic
  • Java集合框架详解(详细讲解,面试必备)
    一、Java集合框架概述   集合可以看作是一种容器,用来存储对象信息。所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。  数组与集合的区别如下:  1)数组长度不可变化而且无法保存具有映射关系的数据;集合类用于保存数量不确定的数据,以及保存具有映射关系的数据。  2)数组元素既可以是基本类型的值,也可以是对象;集合只能保存对象。  Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue(Java5新增的队列),因此Java集合大致也可分成List、Set、Queue、Map四种接口体系,(注意:Map不是Collection的子接口)。  其中List代表了有序可重复集合,可直接根据元素的索引来访问;Set代表无序不可重复集合,只能根据元素本身来访问;Queue是队列集合;Map代表的是存储key-value对的集合,可根据元素的key来访问value。  上图中淡绿色背景覆盖的是集合体系中常用的实现类,分别是ArrayList、LinkedList、ArrayQueue、HashSet、TreeSet、HashMap、TreeMap等实现类。二、Java集合常见接口及实现类1. Collection接口常见方法(来源于Java API
  • 面试笔记@容器
    两个类图 Collection 和 Collections 有什么区别? java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。 Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。 List、Set、Map 之间的区别是什么? 比较ListSetMap继承接口CollectionCollection 常见实现类AbstractList(其常用子类有ArrayList、LinkedList、Vector)AbstractSet(其常用子类有HashSet、LinkedHashSet、TreeSet)HashMap、HashTable常见方法add( )、remove( )、clear( )、get( )、contains( )、size( )add( )、remove( )、clear( )、contains( )、size( )put( )、get( )、remove( )、clear( )、containsKey( )、containsValue( )
  • Java 集合基础高频面试题
    大家好,很高兴我们可以继续学习交流Java高频面试题。本小节是Java基础篇章的第四小节,主要介绍Java中的常用集合知识点,涉及到的内容包括Java中的三大集合的引出,以及HashMap,Hashtable和ConcurrentHashMap。 本小节内容几乎是Java面试中必考的点,或者说是你必须要熟练掌握的知识点。在实际的开发的工作中,我们经常借助集合完成数据的排序,查找等操作。熟练掌握Java中的常用集合,对于实际开发工作效率的提升也很有帮助。 我们先来介绍下Java中集合知识的整体情况吧。 三大集合接口的引出: Java中的集合,从上层接口上看分为了两类,Map和Collection。也就是说,我们平时接触到的常用的集合,包括HashMap,ArrayList和HashSet等都直接或者间接的实现了这两个接口之一。而Collection接口的子接口又包括了Set和List接口。这样我们常见的Map,Set和List三大集合接口就出来了。接口类图如下所示: 这个时候,比较“机灵”的面试官就会发问了。 面试官:Map,List和Set都是Collection的子接口吗? 答:Map是和Collection并列的集合上层接口,没有继承关系;List和Set是Collection的子接口。 在本小节的附图中,我们给出了本节所涉及到的集合的类图结构
  • 从零说起: 3.数组与集合
    数组 一. 概念及使用 定义 ​ 一个变量只能存一个数据, 如果想要存储多个数据, 就需要通过数组来完成 ​ 同一个类型的数据集合, 数组其实就是一个容器 数组的特点: ​ 要求必须存储同一种类型的数据 ​ 存储时必须要明确元素的个数 实质 ​ 数组 是java 容器中的一种 ​ 数组其实就是存储了固定个数并且必须是同一类型的元素的容器 分类 ​ 一维数组 ​ 二维数组 ​ 多维数组 一维数组 声明的格式 格式一: 元素类型[] 数组名 = new 元素类型[元素的个数 或者 数组的长度]; 格式二: 元素类型[] 数组名 = new 元素类型[]{元素1, 元素2,元素3...}; 简化版 元素类型[] 数组名 = {元素1, 元素2, 元素3...}; 数组中常见的异常 java.lang.ArrayIndexOutOfBoundsException -- 数组下标越界异常 java.lang.NullPointerException -- 空指针异常 增强for 循环 for(循环变量的类型 循环变量的名称 :要遍历的对象){ 循环体内容; } 要遍历的对象: 可以是数组也可以是集合 循环变量类型: 其实就是数组的 数据类型 循环变量的名称:可以自定义, 迭代显示的内容 -- 数组中存放的每个数据 好处: 针对的都是容器, 遍历的过程交由编译器去执行
  • Java集合框架详解(JDK1.8)带走你的烦恼
    目录 1.前言: 2.集合类图概述: 3.接口及类的详解: 1.Iterator接口 2.Iterable接口 3.Collection接口 4.List接口及其实现类 一.ArrayList 类 二.LinkedList类 三.Vector类 四.Stack类 5.Set接口及其实现类 一.HashSet和LinkedHashSet 二.TreeSet类 6.Queue接口及其实现类 7.Deque接口及其实现类 一.ArrayDeque类 二.LinkedList类(此处用来实现双端队列) 8.Map接口及其实现类 一.HashMap类 二.LinkedHashMap类 三.TreeMap类 1.前言: 在jdk1.2之前,Java就提供了诸如:Dictionary, Vector, Stack,这些类用来存储和操作对象组。但是它们缺少一个统一的主题。于是在jdk1.2之后便出现了集合框架,在jdk1.5上又添加了Iterable接口用来实现集合的迭代, 整个集合框架就围绕一组标准接口(例如Set,List) 而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList, HashSet, 和 TreeSet等,除此之外你也可以通过这些接口实现自己的集合。 读者还应注意Java中集合与数组的区别: 已定义集合的大小可变,而已定义的数组大小不可变(注意
  • 17--List集合&Set集合相关十三道习题
    练习一:List接口的特点 请简述List接口的特点。 它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。 它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。 练习二:hashCode和equals方法 请简述HashSet去除重复元素的原理。 调用被添加元素的hashCode(),和HashSet中已有元素的hashCode比较是否相同 如果不相同,直接存储 如果相同,调用equals方法比较是否相同 不相同,直接存储元素 相同,认为是同一元素.不存储 练习三:数据结构 简述常见的数据结构中元素的存取特点。 栈:stack,又称堆栈,对元素的存取特点是:先进后出。即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素。 队列:queue,简称队,对元素的存取特点是:先进先出。即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素。 数组:Array,是有序的元素序列,对元素的存取特点是: 1、查找元素快:通过索引,可以快速访问指定位置的元素 2、增删元素慢 (1)指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根据索引
  • Java集合框架详解——Collection、Iterator、List、Set、Map、Collections工具类
    总体预览 Collection接口:单列集合,用来存储一个一个的对象 List接口:存储有序的、可重复的数据。 -->“动态”数组,替换原的数组 ArrayList:作为List接口的主要实现类;线程不安全的,效率高;底层使用Object[] elementData存储LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList高;底层使用双向链表存储Vector:作为List接口的古老实现类;线程安全的,效率低;底层使用Object[] elementData存储 Set接口:存储无序的、不可重复的数据 -->高中讲的“集合” HashSet:作为Set接口的主要实现类;线程不安全的;可以存储null值 LinkedHashSet:作为HashSet的子类;遍历其内部数据时,可以按照添加的顺序遍历在添加数据的同时,每个数据还维护了两个引用,记录此数据前一个数据和后一个数据。对于频繁的遍历操作,LinkedHashSet效率高于HashSet. TreeSet:可以照添加对象的指定属性,进行排序。 Map:双列数据,存储key-value对的数据 —类似于高中的函数:y = f(x) HashMap:作为Map的主要实现类;线程不安全的,效率高;存储null的key和value LinkedHashMap:保证在遍历map元素时,可以照添加的顺序实现遍历。 原因
  • 黑马毕向东Java课程笔记(day15-6——15-13):集合类(集合框架)——泛型+集合对象排序与比较+JDK9对集合的优化+Debug
    1、泛型概述级示例   泛型的特点如下 泛型:JDK1.5版本以后出现新特性,用于解决安全问题,是一个类型安全机制。用于限定类型,避免出现ClassCastException类型转换异常! 好处 1.将运行时期出现问题ClassCastException,转移到了编译时期,方便于程序员解决问题,让运行时问题减少,安全。(eclipse中,编译时期可能出现的异常会标红) 2,避免了强制转换麻烦。   注意,JDK1.7之后第二个<>内的泛型限定可以不用写   泛型示例1 /* 练习:按照字符串长度排序。 字符串本身具备比较性。但是它的比较方式不是所需要的,这时就只能使用比较器。 (15-5,5.30:用匿名内部类的方法写,不过这样写代码太繁琐!) */ package pack; import java.util.*; class GenericDemo { public static void main(String[] args) { //在集合定义的时候就指定数据类型:利用泛型 ArrayList<String> al = new ArrayList<String>(); al.add("abc01");//Object obj = new String("abc01");这里其实向上类型转换了! al.add("abc0991"); al.add("abc014"); /
  • 如何确定列表是否用Java排序?(How to determine if a List is sorted in Java?)
    问题 我想要一个采用List<T>的方法,其中T实现Comparable并根据列表是否排序返回true或false 。 用Java实现此的最佳方法是什么? 显然,泛型和通配符是为了能够轻松处理此类事情,但我将所有事情弄得一团糟。 如果有一个类似的方法来检查列表是否是相反的顺序,那也很好。 回答1 番石榴通过其出色的Ordering类提供了此功能。 Ordering是Comparator ++。 在这种情况下,如果您具有实现Comparable的某种类型的列表,则可以编写: boolean sorted = Ordering.natural().isOrdered(list); 这适用于任何Iterable ,不仅适用于List ,而且您可以通过指定null应该在任何其他非null元素之前还是之后轻松地处理null : Ordering.natural().nullsLast().isOrdered(list); 另外,由于您提到您希望能够检查颠倒顺序和正常顺序,因此可以执行以下操作: Ordering.natural().reverse().isOrdered(list); Java 8用户:使用等效的Comparators#isInOrder(Iterable)代替,因为其余的Ordering大多已过时(如类文档中所述)。 回答2 这是可以解决问题的通用方法: public