2019/3/4 java集合学习(二)

时间:2022-11-11 08:42:02

java集合学习(二)

在学完ArrayList 和 LinkedList之后,基本已经掌握了最基本的java常用数据结构,但是为了提高程序的效率,还有很多种特点各异的数据结构等着我们去运用,类如可以快速寻找的HashMap,可以自动排序而且不重样的TreeSet,可以保证线程安全的Hashtable,既可以保证数据不重样又可以键值存放的HashSet等等,这些数据结构都适用于不同的场景,各有其长处,我们应该仁者见仁,智者见智,数据结构的使用因需求而异,没有最好的数据结构类,而是有最适合的类。

首先着重了解一下极大提高搜索效率的HashMap.在我们没有学习HashMap的时候,搜索某一对象只能从头开始寻找,这是非常浪费时间的。如果我们能够像查字典一样,根据搜索的对象的信息指定存放的位置,再到需要的时候,再根据它的信息来索引,是不是比传统的方法快很多呢?于是,在计算机科学家的探索之下,HashMap诞生了,首先来描绘一下它的工作原理:存放对象(put)的时候,需要把对象和一个键值对应起来,再根据对象对应的键值产生一个hashcode,再根据hashcode存放到由LinkedList组成的子数据结构,如果当前为空,会创建LinkedList。就是这样,高效率的HashMap就完成了,就是相当我们现实生活用的字典了。

HashMap的 常用Api:

get(Object key) :
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null

put(K key, V value) 
将指定的值与此映射中的指定键关联(可选操作)。

putAll(Map<? extends K,? extends V> m) 
从指定映射中将所有映射关系复制到此映射中(可选操作)。

values() 
返回此映射中包含的值的 Collection 视图。

size() 
返回此映射中的键-值映射关系数。

remove(Object key) 
如果存在键的映射关系,则将其从此映射中移除(可选操作)。

有关Hashmap的高效算法:在计算与某一对象重复的有多少个时,我们可以用HashMap来存放全部对象数据,然后HashMap存放的是该对象对的数组,看是否重复的时候可以get()得到一个数组,再看数组的长度就可以知道与之重复的有多少个了!

Collections工具类:

排序:collections.sort(  集合类),可以用这个来排序的一般是实现了Comparable接口的,基本类型的封装类都实现了该接口。在对其他类进行排序时,需自己实现该类。实现方法:

Class Hero implements Comparable<Hero>{

//实现

Public int compareTo(  Hero H) {

If(  H.hp >hp)//这样是从小到大,反过来是从大到小

Return 1;

Else

Return -1;

}

这样,就可以实现自定义类的自定义排序。

TreeSet的了解:

TreeSet是由二叉树实现的,实现了Set类,所以其中包含的数据是不重复的,而且它是有序的,默认的排序方式是从小到大。如果我们要重新定义排序方法,则需要创建一个Comparator 对象,方法如下:

Comparator<Interger> c = new Comparator<>(){

Public int compare( int a , int b){

  If(  a > b)//从小到大!

Return 1;

Else if(a == b)

Return 0;

Else

Return -1;

}};

还有其他各种有趣的类的比较:

HashSet: 无序
LinkedHashSet: 按照插入顺序
TreeSet: 从小到大排序

 

 

 

 

 

 

 

 

 

2019/3/4 java集合学习(二)的更多相关文章

  1. 2019&sol;3&sol;2周末 java集合学习(一)

    Java集合学习(一) ArraysList ArraysList集合就像C++中的vector容器,它可以不考虑其容器的长度,就像一个大染缸一 样,无穷无尽的丢进去也没问题.Java的数据结构和C有 ...

  2. &OpenCurlyDoubleQuote;全栈2019”22篇Java异常学习资料及总结

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"22篇Ja ...

  3. Java集合学习&lpar;9&rpar;:集合对比

    一.HashMap与HashTable的区别 HashMap和Hashtable的比较是Java面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题.Hash ...

  4. 转:深入Java集合学习系列:HashSet的实现原理

    0.参考文献 深入Java集合学习系列:HashSet的实现原理 1.HashSet概述: HashSet实现Set接口,由哈希表(实际上是一个HashMap实例)支持.它不保证set 的迭代顺序:特 ...

  5. java集合学习&lpar;2&rpar;:Map和HashMap

    Map接口 java.util 中的集合类包含 Java 中某些最常用的类.最常用的集合类是 List 和 Map. Map 是一种键-值对(key-value)集合,Map 集合中的每一个元素都包含 ...

  6. 【由浅入深理解java集合】&lpar;二&rpar;——集合 Set

    上一篇文章介绍了Set集合的通用知识.Set集合中包含了三个比较重要的实现类:HashSet.TreeSet和EnumSet.本篇文章将重点介绍这三个类. 一.HashSet类 HashSet简介 H ...

  7. &OpenCurlyDoubleQuote;全栈2019”113篇Java基础学习资料及总结

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. Java集合学习笔记

      在Java中,我们经常听到Collections框架.Collection类以及Collections类.这三者名字相似,但是从概念上讲却是不同的.Collections框架泛指Java中用于存储 ...

  9. Java 集合学习--HashMap

    一.HashMap 定义 HashMap 是一个基于散列表(哈希表)实现的键值对集合,每个元素都是key-value对,jdk1.8后,底层数据结构涉及到了数组.链表以及红黑树.目的进一步的优化Has ...

随机推荐

  1. Leetcode-190 Reverse Bits

    #190. Reverse Bits Reverse bits of a given 32 bits unsigned integer. For example, given input 432615 ...

  2. window&period;location 结构

    属性 含义   protocol 协议   hostname 服务器的名字   port 端口   pathname URL中主机名后的部分   search "?"后的部分,又称 ...

  3. 封装ios静态库碰到的一些问题(二)

    在静态库建立好了之后呢,于是应用程序就引用它,加上拷贝的h文件,但是引用之后Build之后提示很多sybmbol 重复 于是进行检查,确实由于是从其他工程修改过来的,很多基础库都引用了,删除之,最后就 ...

  4. CSS hack前传——背景图片全屏

    在之前的博客CSS hack中我有提到,一个问题的解决让我对CSS hack的态度从不屑一顾,到认真研究了实验一下,事情是这样的,最近产品发布,向来狂妄的我被一个bug纠缠住了,甚至丧气的表示我做不出 ...

  5. MVC中的&commat;Html&period;DisplayFor如何控制日期的显示格式

    在Sql Server中,如果将某字段定义成日期 时间 类型DateTime,那么在视图中会默认显示成年月日时分秒的方式(如 2013/8/6 13:37:33) 如果只想显示成年月日或者其他自定义形 ...

  6. 解决cocos2d-X 2&period;0版本后创建的Android项目提示org&period;cocos2dx&period;lib&period;Cocos2dxActivity找不到问题

    原地址: http://blog.163.com/zhoulong19880518@126/blog/static/6070970220132511558143/ 解决方法:    复制 ***\co ...

  7. g&plus;&plus;的常用参数

    -c 编译成目标文件.o-o 指定输出文件名,输出文件名跟在-o后面,用空格分隔.如果不使用这个选项,缺省的输出文件名为a.out.-g 产生有调试信息的可执行文件-w 不产生警告信息-l 连接指定的 ...

  8. Keil C51程序调试过程

    用Keil C51编写程序时,经常需要调试,如果不是经常用这个软件的话,很容易忘记这些调试步骤,现在举一个例子“验证延迟函数delay()使其延迟的时间为500ms”说明. 源程序写完后,就可以调试了 ...

  9. 菜单组件——axure线框图部件库介绍

    软件类的教程,我写不出长篇大论,这里面的都是基础的操作,希望初学者,根据一个功能演示,可以自己测试其他功能菜单的效果! Axure自带的菜单组件,我几乎没有用到过,做菜单导航,我第一时间想到的还是矩形 ...

  10. 优化一个小时不出结果的SQL

    今天刚清闲点,在网上看些资料,这时,用户QQ上发来求助,说一个更新数据的SQL语句很慢,都一个小时了也不出结果,于是,了解下具体的情况,略施小计,5s出结果,下面是我分析该SQL时用到的执行计划,略去 ...