Map:
在运用map和set
集合之前首先要弄清楚它们的基本定义是什么。
简介:map是一种关联式容器,但是她储存方式是以键值对(key/value)存在的。
Map用法:
定义Map集合并往集合中加入几个元素:
//map 键值对 json格式 根据你的键名来获取对应的值 Map<String, Object> map=new HashMap<>(); map.put("ht", "邵阳"); map.put("hxc","永州"); map.put("zsy", "岳阳"); map.put("cpc", "株洲"); System.out.println(map);//輸出map中添加的值
有的时候值插入过多就会出现重复值得问题是什么样子,那要怎么解决呢?
key相同则覆盖values的值 以最后加入进去的值为真
Map<Integer,Object> map2=new HashMap<>(); //避免出现重复的健 for (int i = 0; i <10; i++) { if (map2.containsKey(i)) { map2.put(i, "z"+i); } }
如果值value相同 而key不同 又会成为什么问题?
当键值对中的值相同而健不同,你可以同时创建2个输出发现
键值对只和健有关,与值不相关。
用方法Map.entrySet(),接口Map.Entry去映射输出Map中键值(因为接口中提供getKey与getValue方法)
//用Map.Entry接口与Map.entrySet()方法映射 for (java.util.Map.Entry<Integer,Object> emp :map2.entrySet()) { System.out.println("key"+emp.getKey()+"values:"+emp.getValue()); } System.out.println(map2);
Set:
简介:set也是一种关联式容器,不过它的容器底层实现原理是黑红树;
红黑树是一颗近似平衡的搜索二叉树,在对元素的查找中有很高的效率。
Set用法:
定义一个Set集合并往其中添加几条元素:
Set<String> set=new TreeSet(); //添加几个元素 set.add("ht"); set.add("zs"); set.add("jk"); set.add("hf"); set.add("qq");
set一般遵循自然排序(26个英文字母),Set集合的值是不可重复的,若是重复那么他就成了无序。
迭代器输出元素
//迭代器输出 Iterator<String> iterator=set.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
for循环遍历元素
//循环遍历输出 for (String s : set) { System.out.println(s); }
自定义排序
//自定义排序器 Set<Person> set2=new TreeSet<>(new Age()); //equals比较的是内存的地址,而不是对象属性 // System.out.println(new Person(1,"青灯",17).equals(new Person(1,"青灯",17))); set2.add(new Person(1,"青灯",17)); set2.add(new Person(1,"青灯",17)); set2.add(new Person(1,"青灯",17)); set2.add(new Person(1,"青灯",17)); set2.add(new Person(1,"青灯",17)); //foreach的底层原理就是迭代器 for (Person p : set2) { //默认转换为String的类型 System.out.println(p); }