java 中Map详解及实例代码
程序员文章站
2024-03-01 11:47:10
map接口
map类似y(x)=x;这样的函数(key对应x,value对应y)
map与collection并列存在。用于保存具有映射关系的数据:key-value...
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);
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: 浅析java创建文件和目录
下一篇: 简单介绍MySQL中的事务机制