详解JavaLinkedHashMap与HashMap的使用_第1页
详解JavaLinkedHashMap与HashMap的使用_第2页
详解JavaLinkedHashMap与HashMap的使用_第3页
详解JavaLinkedHashMap与HashMap的使用_第4页
详解JavaLinkedHashMap与HashMap的使用_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第详解JavaLinkedHashMap与HashMap的使用目录HashMap存储自定义类型键值LinkedHashMapMap集合练习JDK9对集合添加的优化

HashMap存储自定义类型键值

练习:每位学生(姓名,年龄)都有自己的家庭住址。那么,既然有对应关系,则将学生对象和家庭住址存储到map集合中。学生作为键,家庭住址作为值。

注意,学生姓名相同并且年龄相同视为同一名学生。

编写学生类:

publicclassStudent{

privateStringname;

privateintage;

publicStudent(){

publicStudent(Stringname,intage){

=name;

this.age=age;

publicStringgetName(){

returnname;

publicvoidsetName(Stringname){

=name;

publicintgetAge(){

returnage;

publicvoidsetAge(intage){

this.age=age;

@Override

publicbooleanequals(Objecto){

if(this==o)

returntrue;

if(o==null||getClass()!=o.getClass())

returnfalse;

Studentstudent=(Student)o;

returnage==student.ageObjects.equals(name,);

@Override

publicinthashCode(){

returnObjects.hash(name,age);

}

编写测试类:

publicclassHashMapTest{

publicstaticvoidmain(String[]args){

//1,创建Hashmap集合对象。

MapStudent,Stringmap=newHashMapStudent,String

//2,添加元素。

map.put(newStudent("lisi",28),"上海");

map.put(newStudent("wangwu",22),"北京");

map.put(newStudent("zhaoliu",24),"成都");

map.put(newStudent("zhouqi",25),"广州");

map.put(newStudent("wangwu",22),"南京");

//3,取出元素。键找值方式

SetStudentkeySet=map.keySet();

for(Studentkey:keySet){

Stringvalue=map.get(key);

System.out.println(key.toString()+"....."+value);

}

当给HashMap中存放自定义对象时,如果自定义对象作为key存在,这时要保证对象唯一,必须复写对象的hashCode和equals方法(如果忘记,请回顾HashSet存放自定义对象)。如果要保证map中存放的key和取出的顺序一致,可以使用java.util.LinkedHashMap集合来存放。

LinkedHashMap

我们知道HashMap保证成对元素唯一,并且查询速度很快,可是成对元素存放进去是没有顺序的,那么我们要保证有序,还要速度快怎么办呢?在HashMap下面有一个子类LinkedHashMap,它是链表和哈希表组合的一个数据存储结构。

publicclassLinkedHashMapDemo{

publicstaticvoidmain(String[]args){

LinkedHashMapString,Stringmap=newLinkedHashMapString,String

map.put("青菜","萝卜");

map.put("红花","绿叶");

map.put("美景","佳人");

SetEntryString,StringentrySet=map.entrySet();

for(EntryString,Stringentry:entrySet){

System.out.println(entry.getKey()+""+entry.getValue());

}

结果:

青菜萝卜

红花绿叶

美景佳人

Map集合练习

需求:计算一个字符串中每个字符出现次数。分析:

获取一个字符串对象创建一个Map集合,键代表字符,值代表次数。遍历字符串得到每个字符。判断Map中是否有该键。如果没有,第一次出现,存储次数为1;如果有,则说明已经出现过,获取到对应的值进行++,再次存储。打印最终结果

代码:

publicclassMapTest{

publicstaticvoidmain(String[]args){

//友情提示

System.out.println("请录入一个字符串:");

Stringline=newScanner(System.in).nextLine();

//定义每个字符出现次数的方法

findChar(line);

privatestaticvoidfindChar(Stringline){

//1:创建一个集合存储字符以及其出现的次数

HashMapCharacter,Integermap=newHashMapCharacter,Integer

//2:遍历字符串

for(inti=0;iline.length();i++){

charc=line.charAt(i);

//判断该字符是否在键集中

if(!map.containsKey(c)){//说明这个字符没有出现过

//那就是第一次

map.put(c,1);

}else{

//先获取之前的次数

Integercount=map.get(c);

//count++;

//再次存入更新

map.put(c,++count);

System.out.println(map);

}

JDK9对集合添加的优化

通常,我们在代码中创建一个集合(例如,List或Set),并直接用一些元素填充它。实例化集合,几个add方法调用,使得代码重复。

publicclassDemo01{

publicstaticvoidmain(String[]args){

ListStringlist=newArrayList();

list.add("abc");

list.add("def");

list.add("ghi");

System.out.println(list);

}

Java9,添加了几种集合工厂方法,更方便创建少量元素的集合、map实例。新的List、Set、Map的静态工厂方法可以更方便地创建集合的不可变实例。例子:

publicclassHelloJDK9{

publicstaticvoidmain(String[]args){

SetStringstr1=Set.of("a","b","c");

//str1.add("c");这里编译的时候不会错,但是执行的时候会报错,因为是不可变的集合

System.out.println(str1);

MapString,Integerstr2=Map.of("a",1,"b",2);

System.out.print

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论