当前位置: 移动技术网 > IT编程>开发语言>Java > java 中Map详解及实例代码

java 中Map详解及实例代码

2019年07月22日  | 移动技术网IT编程  | 我要评论

map接口

map类似y(x)=x;这样的函数(key对应x,value对应y)

map与collection并列存在。用于保存具有映射关系的数据:key-value

map 中的 key 和 value 都可以是任何引用类型的数据

map 中的 key 用set来存放,不允许重复,即同一个 map 对象所对应的类,须重写hashcode()和equals()方法。

常用string类作为map的“键”。

key 和 value 之间存在单向一对一关系,即通过指定的 key 总能找到唯一的、确定的 value。

map接口

丨---------hashmap:map的主要实现类


丨---------treemap:按照添加进map中的元素的key的指定属性进行排序,要求:key必须是同一个类的对象!针对key:自然排序 vs 定制排序

丨---------hashtable:是一个古老的实现类,线程安全,与hashmap不同,它不允许使用null作为key和value(不建议使用)(有多老!看命名就知道,连驼峰命名法都木有用上!哈哈哈哈哈!)

丨---------properties:常用来处理属性文件。键和值都为string类型的。(这儿你常用的配置文件就是)

public class testmap{

/*
 *
 *object put(object key,object value):向map中添加一个元素
 *
 *object remove(object key):按照指定的key删除此key-value对
 *
 *void putall(map t):
 *
 *void clear():清空
 *
 *object get(object key):获取指定key的value值,若无此key则返回null
 *
 *boolean containskey(object key):
 *
 *boolean containsvalue(object value)
 *
 *int size()
 *   
 *boolean isempty()
 *
 *boolean equals(object obj)
 *
 *hashmap:
 *1.key是用set来存放的,不可重复,value是用collection来存放的,可重复
 * 一个key-value对,是一个entry,所有的entry是用set存放的,也是不可重复的。
 *2.向hashmap中添加元素时,会调用key所在类的equals()方法,判断两个key是否相同,若相同则只能够添加进一个,则只能添加进后加的那个元素
 *
 */

//两个put的key相同,输出结果为后加进去的那个,所以输出是value=87

  public void test1(){

    map map = new hashmap();
    map.put("aa",213);
    map.put("bb",456);
    map.put("bb",45);//与上边的key相同所以map中是这个
    map.put(123,"cc");
    map.put(null,null);
    map.put(new person("xx",21),89);
    map.put(new person("xx",21),87);//与上边的key相同所以map中是这个
    system.out.println(map.size());
    map.remove("bb");
    system.out.println(map);
    object value = map.get(123);
    system.out.println(value);

  }
  /*

   如何遍历map
   set keyset()
   collection values()
   set entryset()

  */

  @test
  public void test2(){

    map map = new hashmap();
    map.put("aa",213);
    map.put("bb",45);
    map.put(123,"cc");
    map.put(null,null);
    map.put(new person("xx",21),89);


    //1.遍历key集.此时打印输出 null,aa,person    //[name=dd,age=23],bb,123
    set set = map.keyset();
    for(object obj : set){
      system.out.println(obj);
    }
    //2.遍历value集.此时打印输出null,213,89,45,cc
    collection values = map.values();
    iterator i = values.iterator();
    while(i.hasnext()){
      system.out.println(i.next());
    }
    //3.如何遍历key-value对
    //方式一
    set set1 = map.keyset();
    for(object obj1 : set1){
      system.out.println(obj + "----->" + map.get(obj));

    }
    //方式二
    set set2 = map.entryset();
    for(object obj : set2 ){
      map.entry entry = (map.entry)obj;
      system.out.println(entry.getkey() + "---->" + entry.getvalue());
    }
  }


  @test
  public void testlinkedhashmap(){

    map map = new linkedhashmap();
    map.put("aa",213);
    map.put("bb",45);
    map.put(123,"cc");
    map.put(null,null);
    map.put(new person("xx",21),89);

    set set1 = map.keyset();
    for(object obj1 : set1){
      system.out.println(obj + "----->" + map.get(obj));
    }
  }

  @test
  public void testtreemap(){


    //自然排序
    map map = new treemap();
    map.put(new person("aa",23),89);
    map.put(new person("mm",22),79);
    map.put(new person("bb",23),99);
    map.put(new person("cc",13),69);

    set set1 = map.keyset();
    for(object obj1 : set1){
      system.out.println(obj + "----->" + map.get(obj));
    }
  }


  @test
  public void testproperties(){

    properties pros = new properties();
    pros.load(new fileinputstream(new file(jdbc.properties )));
    string user = pros.getproperty("user");
    string password = pros.getproperty("password");

  }
}

<下面重点:>

/*

  操作collection以及map的工具类:collections

  面试题:区分collection和collections

  reverse(list):反转list中元素的位置
  shuffle(list):对list集合元素进行随机排序
  sort(list):
  sort(list,comparator):
  swap(list,int,int):

 

 */

 

list list = new arraylist();
list.add(123);
list.add(23);
list.add(33);
list.add(43);
list.add(53);

list list2 = new arrayslist();//若用list2当src来复制list集合则会报错,出现数组越界,以为新定义的集合长度是0,而源集合长度是5,塞不进去

list list1 = arrays.aslist(new object[list.size()]);//将数组作为list长度直接取

collections.copy(list1,list);//调用工具类不用返回值


-----------------同步控制

synchronized()方法

  //通过如下的方法保证list的线程安全性。安全性高了但是效率低啊!

  list list2 = collections.synchronizedlist(list);

  system.out.println(list2);

 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网