Map的一种用途——去重复
来源:互联网 发布:算法导论难吗 编辑:程序博客网 时间:2024/05/17 22:51
茉茉今天看到一个同事的代码里有这样一段:
public JSONArray clearRepeatJSONArray(JSONArray arrayTemp){for (int i = 0; i < arrayTemp.size(); i++) { //使用TreeMap去掉重复并排序temp.put(arrayTemp.getString(i) ,"");}//使用迭代器取出TreeMap的keySet set = temp.keySet();Iterator iter = set.iterator();while (iter.hasNext()) {array.add(iter.next());}return array;}
通过将JSONArray中的各JSON对象循环赋给一个Map作为Key值,来去除JSON数组中的重复值。
不知道有没有人和我一样是非计算机专业入了这行的,没有学过数据结构这门课,自学的,掌握的不太好,看着这段硬是没明白为什么可以这样做。
不过,没关系,先写了个实验程序:
package test;import java.util.Iterator;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import java.util.TreeMap;public class test {public static void main(String[] args) {Map<String, String> map=new TreeMap<String,String>();map.put("child1", "test1");map.put("child1", "test2");map.put("child2", "test1");System.out.println(map.size());Set<Entry<String,String>> set=map.entrySet();Iterator<Entry<String,String>> iterator=set.iterator();while (iterator.hasNext()) {Entry<String,String> entry = iterator.next();System.out.println("key:"+entry.getKey()+" value:"+entry.getValue());}}}
控制台输出结果:
2
key:child1 value:test1
key:child2 value:test2
可以看出:在向child1键第二次放入值时,覆盖了第一次放入的值(蠢蠢的茉茉还用HashMap又试了遍,结果一样)
看Jdk中的源码:
TreeMap的put方法是这样的:
public V put(K key, V value) { Entry<K,V> t = root; if (t == null) { compare(key, key); // type (and possibly null) check root = new Entry<>(key, value, null); size = 1; modCount++; return null; } int cmp; Entry<K,V> parent; // split comparator and comparable paths Comparator<? super K> cpr = comparator; if (cpr != null) { do { parent = t; cmp = cpr.compare(key, t.key); if (cmp < 0) t = t.left; else if (cmp > 0) t = t.right; else return t.setValue(value); } while (t != null); } else { if (key == null) throw new NullPointerException(); Comparable<? super K> k = (Comparable<? super K>) key; do { parent = t; cmp = k.compareTo(t.key); if (cmp < 0) t = t.left; else if (cmp > 0) t = t.right; else return t.setValue(value); } while (t != null); } Entry<K,V> e = new Entry<>(key, value, parent); if (cmp < 0) parent.left = e; else parent.right = e; fixAfterInsertion(e); size++; modCount++; return null; }put方法会遍历TreeMap,如果配到一个节点的Key值与要加入的Key相同,会将要存入的值放在该节点上,覆盖原来的值
在May中,一个Key只会出现一次。
想想也是哎,如果可以有同名的Key,再get方法用key取值时,要怎么返回呢
虽然想通了觉得自己好蠢萌,不过今天还是看到了一种新思路,棒棒哒
0 0
- Map的一种用途——去重复
- Java map、set去重复的值
- 宏的一种用途
- java使用map去重复
- 随机数组——不重复下标的一种思路
- Java中Map的用途
- (13)window.onload的一种用途
- Swift延迟加载的一种用途
- 首个重复字符(map的用法)----去哪儿2015研发工程师笔试题
- java8 stream初试,map排序,list去重,统计重复元素个数,获取map的key集合和value集合
- SQLServer 数据去重的一种处理方法(增加一个自增字段,利用自增,删除重复数据)
- mysql的去重复处理
- sql去重复的行
- Oracle 去重复的数据
- Oracle 去重复的数据
- 去重,重复的去掉
- 使用map 对list 进行去重复(JAVA)
- 蓝桥杯——说好的进阶之去重复元素的排列组合
- 秋优果好吃又养生
- 使用adb命令对手机进行截屏并保存到电脑
- modelism写入txt
- HDU 5311:Hidden String【字符串】
- docker错误
- Map的一种用途——去重复
- 封装CoreData数据库
- GitHub上README.md教程
- ucos学习资料、论坛等
- TCL脚本在Eclipse开发的环境搭建(图解)。
- 优秀网站/资源收藏/日常总结
- 我已经工作整整五个月了
- Ubuntu下的gcc降级
- JavaScript学习(5.7.2):debugger 语句