我不知道我的博客对大家有没有用,但是现在都比较喜翻用手机,相信大家都感觉在手机上或者是在电脑上看比看书简单多了哈,为了给大家已提供便利,我还是再多写一点吧。
我们想一想,自己当年的那个时候@_@(哎?我才大一呀,我为啥说这话?算了,接着写吧……),其实就是考驾照的时候,考科一那个时候,是不是需要自己先拿一个号,等了好半天,好不容易等到了人家叫自己,然后把自己应该在哪台电脑上考试给忘了?反正我这个智障是忘了,之后又等了半天,才让人家工作人员给我查了一下座位号,才考上科一。
我们在这里面能不能思考一下呢?我们查询自己的号码的时候,是怎么查的呢?(接下来的例子,有点儿恶心,希望大家挺住)
warning warning 前方高能 前方高能
先来看看API里面是怎么写的吧:
Map 接口提供三种collection 视图,允许以键集、值集合或键-值映射关系集的形式查看某个映射的内容。映射的顺序 定义为迭代器在映射的 collection 视图中返回其元素的顺序。某些映射实现可明确保证其顺序,如 TreeMap 类;某些映射实现则不保证顺序,如 HashMap 类。 其实重要的就是最后两句话:某些映射实现可明确保证其顺序,如 TreeMap 类;
某些映射实现则不保证顺序,如 HashMap 类。
那么我们再来了解一下Map键值对应的设计架构
图像不好画,就直接打字了
-> AbstractMap实现接口 -> HashMap继承AbstractMap
-> TreeMap继承AbstractMap
<interface> Map
-> HashTable实现接口 -> properties类继承HashTable
下面的那个properties类在这篇博客里面并不进行详细描述(啊,不对,就是不描述,下一篇博客应该会写的)
这篇就只专注于HashMap和TreeMap两个类的使用
首先使用HashMap来写段代码:
import java.util.*;
public class MapDemo {
public static void main(String [] args) {
Scanner in = new Scanner(System.in);
Map <String,Integer> map = new HashMap <String,Integer> ();
//第一个参数是姓名 第二个是座位号
map.put("熊初墨", 1003);
map.put("张余歌", 1005);
map.put("史诗王爵", 1008);
System.out.println("待查询姓名:");
String name = in.nextLine();
System.out.println("座位号:" + map.get(name));
}
}
这个名字啊,我真的是……(编辑小白:怎么啦,有问题吗?)
好吧,就这样吧。
Map设定键值对应的方法:map.put("熊初墨", 1003);
Ma使用键值对应来查询座位号:map.get(name)
好像需要记住的只有这两个了。
大家可能都很好奇,输出的结构是啥?别着急呀,现在就写:
待查询姓名:
熊初墨
座位号:1003
还好写对了,要不然多尴尬。
既然对了,就再多了解一下上面说的有顺序的问题,TreeMap和HashMap有什么区别呢?
- 现在我输出一下HashMap里面的所有信息:
你们自己看,是不是 不按规律的输出了。
为了让一些强迫症患者也轻松的敲java,java提供了TreeMap类(当然这个是扯淡……肯定有他的重要作用)
来试试TreeMap:
这样看起来就很舒服了,看来是按照值的从大到小的顺序输出的。
最后加上一点东西:
Map的特点是什么?
特点就是:不重复,因为一个键对应一个值,所以这个也常用来排除相同的对象
那么提到不重复了,想必这个和之前写的比较(comparable)是有关的,但是他又是怎样进行比较的呢?
HashMap的具体流程是这样的:首先调用对象的hashcode方法,之后再调用equal方法,之后再确定对象是不是一样的,在这里,有没有想到之前的写过的调用Collection.sort()方法的时候,要是自己设计的对象是系统没有的数据类型,设计的对象就要实现(implements)接口comparable,之后再重写hashcode方法和equals方法来对对象进行比较
那么TreeMap是怎样进行比较的呢?
他就很简单粗暴了,要求你自己设计的对象,就需要是实现comparable接口的对象,或者在建立TreeMap()对象的时候指定comparator接口的对象
好了,两千字虽然不算多,但是我感觉我过的很充实,希望每天都像这样开开心心的敲代码,我会加油的,小伙伴们,我们一起加油吧!
多多点赞,会变好看,多多留言,会变有钱呐!