java-集合排序,队列,散列表map以及如何遍历
1.1集合排序
可以通过集合的工具类java.util.Collections的静态方法sort需要注意的时,只能对List排序,因为它有序.
Collections.sort(list);
排序字符串:字符串排序是按照字符串字符的编码顺序排序的
如果要将字符串按照自己想要的方式排序就自定义元素类型实现Comparable接口重写int compareTo(Point o)方法
实现comparable接口后需要重写的方法compareto,该方法是用来定义当前对象(this)与参数对象(o)之间的大小关系,返回值不关注具体取值,值关注范围:
当返回值>0:当前对象大于参数对象(this>0)
当返回值<0:当前对象小于参数对象
当返回值=0:两个对象相等
1.2队列java.util.Queue
队列可以存放一组元素,存取元素必须遵循:FIFO即:first input first output 先进先出 queue 接口集成自collection
方法:
boolean offer(E e)入队操作,将给定的元素添加到队列末尾
E poll()出队操作,取出对首元素,取出后该元素就从队列删除
E peek()引用对首元素,获取对首元素,但是该元素还在队列中
双端队列 Deque,Deque继承自接口Queue,双端队列就是两端都可以进出的队列
方法:
boolean offer(E e)入队操作,将给定的元素添加到队列末尾
boolean offerFirst(E e)入队操作,将给定的元素添加到队首,同上
boolean offerLast(E e)入队操作,将给定的元素添加到队列末尾,同上
E poll()出队操作,取出对首元素,取出后该元素就从队列删除
E pollLast()队操作,取出对首元素,取出后该元素就从队列删除
E peek()引用对首元素,获取对首元素,但是该元素还在队列中
2 散列表Map:java.util.MapMap 查找表以key-value对的形式存放元素。所以看起来像是一个多行的表格。
map要求key不允许重复(equals比较为true)
常用实现类 java.util.HashMap散列表,使用散列表算法实现的map
v put(K k, V v)将给定的kv添加进map中若给定的key在map中已经存在,由于map要求key不允许重复,所以这是为替换value操作返回值为这个key原来对应的value值若key在map中不存在,则返回null,使用相同key替换value操作
v get(K k)根据给定的key获取对应的value,若给定的key在当前map中不存在,则返回null
remove(K k)根据key删除元素
3影响散列表查询新能的一个因素是:产生链表而链表的产生的一个主要因素是:
作为key的元素hashcode值一样,而equals比较不为true
hashcode值一样时,在map内部数组的位置相同,但是若key不同,那么就会在该位置产生一个链表,遍历链表检索数据会降低hashmap检索性能
所以要避免
因此在api文档中也有说明对equals与hashcode的重写要求:
1.成对重写,即:当重写一个类的equals方法时,就应当连同重写hashcode方法
2.一致性,即:当两个对象equals比较为true时,hashcode方法返回的数字应该相等,反之,两个对象hashcode相等,equals比较应当为true否则会在hashmap中产生链表
3.稳定性,即:当一个对象参与equals比较的属性的值没有发生改变的前提下,多次调用hashcode返回的数字应当不变。
另一个影响散列表查询速度的因素是,散列表默认初始时散列通大小为16,每当散列表容量达到75%时就会进行扩容,而又因为散列表元素位置是根据hashcode值进行计算产生的位置,当容量产生变化的时候而又保证散列表中元素依然能找到就需要经原有的元素进行重新遍历,也就是当散列表在扩容的时候会产生额外的运算,想要解决这个问题需要从散列表容量进行考虑。
map的遍历
遍历map有三种方式
1 遍历所有的key
遍历所有的keyset<K> heyset();将当前map中所有的key存入一个set集合后返回,遍历该集合等同于遍历了map中所有的key
2 遍历所有的键值对(entry)
获取每一组键值对set<entry> entrySet()map将每一个键值对以一个entry的势力保存entry是map的内部类,提供了两个常用的方法getkey() getvalue()
3 遍历所所有的value(不常用)
遍历所有的valueCollection values()将当前map中所有value存入一个集合后返回
我是初学者,如有更新不好的,欢迎这位大神指出,谢谢大家!
更多精彩以后更新,转载注明!
java-集合排序,队列,散列表map以及如何遍历的更多相关文章
- Java集合--阻塞队列及各种实现的解析
阻塞队列(Blocking Queue) 一.队列的定义 说的阻塞队列,就先了解下什么是队列,队列也是一种特殊的线性表结构,在线性表的基础上加了一条限制:那就是一端入队列,一端出队列,且需要遵循FIF ...
- Java集合(十)实现Map接口的HashMap
Java集合(十)继承Map接口的HashMap 一.HashMap简介(基于JDK1.8) HashMap是基于哈希表(散列表),实现Map接口的双列集合,数据结构是“链表散列”,也就是数组+链表 ...
- Java集合中List,Set以及Map等集合体系详解
转载请注明出处:Java集合中List,Set以及Map等集合体系详解(史上最全) 概述: List , Set, Map都是接口,前两个继承至collection接口,Map为独立接口 Set下有H ...
- Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]
Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 @author Trinea 原文链接:http://www.trinea.cn/android/arrayl ...
- Java集合排序及java集合类详解--(Collection, List, Set, Map)
1 集合框架 1.1 集合框架概述 1.1.1 容器简介 到目前为止,我们已经学习了如何创建多个不同的对象,定义了这些对象以后,我们就可以利用它们来做一 ...
- JAVA集合框架(三)-Map
前言 Map是java中用于存储键值对映射的接口.是解决编程问题最常用的数据结构之一.在工作中,有时候为实现一个功能可能写了好大一段代码,运行是ok了,但是就是不想回头再看,不敢相信自己写的这么烂.这 ...
- Java集合List、Set、Map
集合是 java 基础中非常重要的一部分,同样也是 Java 面试中很重要的一个知识点.所以,给王小整理了这篇关于集合的文章. 1.接口继承关系以及实现 集合类存放于 Java.util 包中,主要有 ...
- Java集合——List,Set,Map总结笔记
1. 集合 Collection 1.1 Java 集合框架 Java 集合框架位于 java.util 包中.Java 集合框架主要包括两种类型的容器,一种是集合(C ...
- java 集合排序(转)
Java API针对集合类型排序提供了两种支持:java.util.Collections.sort(java.util.List)java.util.Collections.sort(java.ut ...
随机推荐
- Wget命令解释
Wget主要用于下载文件,在安装软件时会经常用到,以下对wget做简单说明. 1.下载单个文件:wget http://www.baidu.com.命令会直接在当前目录下载一个index.html的文 ...
- 一文澄清网上对 ConcurrentHashMap 的一个流传甚广的误解!
大家好,我是坤哥 上周我在极客时间某个课程看到某个讲师在讨论 ConcurrentHashMap(以下简称 CHM)是强一致性还是弱一致性时,提到这么一段话 这个解释网上也是流传甚广,那么到底对不对呢 ...
- 2.shell脚本99乘法表
shell脚本99乘法表 [root@localhost data]# vim cf.sh
- 【Java面试】@Resource 和 @Autowired 的区别
Hi,大家好,我是Mic. 一个工作2年的粉丝,问我一个Spring里面的问题. 希望我能从不同的视角去分析,然后碾压面试官. 这个问题是: "@Resource和@Autowired&qu ...
- nifi从入门到实战(保姆级教程)——身份认证
上一篇我们搭建好了nifi的运行环境了 但是每次登陆那一串随机字符串的用户名和密码是不是让人很头疼,那是人类能记住的吗?当然不是!!!! 那么今天我们就来消灭这些难看又难记的字符串. windows( ...
- NC50528 滑动窗口
NC50528 滑动窗口 题目 题目描述 给一个长度为N的数组,一个长为K的滑动窗体从最左端移至最右端,你只能看到窗口中的K个数,每次窗体向右移动一位,如下图: 你的任务是找出窗体在各个位置时的最大值 ...
- NC207028 第k小数
NC207028 第k小数 题目 题目描述 给你一个长度为 \(n\) 的序列,求序列中第 \(k\) 小数的多少. 输入描述 多组输入,第一行读入一个整数 \(T\) 表示有 \(T\) 组数据. ...
- who is the next one?
Turn-Taking: 参加会话的人参加整个会话的过程中轮流说话,end-of-utterance detection systems,是对说话转变的预测,既什么时候发生对话者之间的转变. Eva ...
- 【cartographer_ros】五: 发布和订阅陀螺仪Imu信息
上一节介绍了里程计Odometry传感数据的订阅和发布. 本节会介绍陀螺仪Imu数据的发布和订阅.陀螺仪在cartographer中主要用于前端位置预估和后端优化. 目录 1:sensor_msgs/ ...
- 准备java编程软件与第一个java程序
我们要用的java的编程软件叫做:eclipse windows上安装eclipse 首先需要一个浏览器 要下载eclipse最简单的方式就是在官网下载 官网:https://www.eclipse ...