zoukankan      html  css  js  c++  java
  • 关联逻辑关系数据的存储方式

          Map作为一种容器,最大的价值就是它可以存储key-value对,这样就能方便我们快速查找对应的值(这就是关联逻辑关系数据)。但是,如果我们不仅仅是想要保存对象间的这种逻辑联系,还想要通过它们的这种对应关系,做更多的操作,比如说,我们每个学生,都有对应的学号,当初保存的时候并没有对学号进行排序,而且它们也确实是没有任何规律可言,我们想要的是学号能够按照自然顺序排序的学生名单,那么,我们一开始应该怎样保存呢?现在我这里有两种解决方案,其中就是封装学生这个对象,这个对象里面封装了学生名和学号这两个数据,然后将它存储在一个对象List中,就能利用List的相应方法进行操作。另一种就是我们的Map存储,虽然它的确是方便我们查询,但是如果想要根据key来进行排序,先要取出key,这样的动作,老实说,很麻烦,先上一个普通的版本:

    Set keys = map.keySet();
    if (keys != null) {
       Iterator iterator = keys.iterator();
       while (iterator.hasNext()) {
          Object key = iterator.next();
          Object value = map.get(key);
       }
     
    }

    我们可以看到,这里使用了一个方法,就是keySet(),这个方法能映射出key的set视图,而且我们对这个set进行的任何操作都会直接影响到原来的key,所以使用时必须注意。它支持元素的移除,通过Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作,从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。 因为对这个映射的操作都会影响到原有的key,所以,我们如果确实需要进行删除,我们更多时候是将其变成一个数组,像是这样:String[] keySet = map.keySet().toArray(new String[0]); 这样我们的移除操作就不会影响到原来的key了。这种处理方式是我们必须时刻谨记的,任何对容器直接的操作都是具有危险的,我们要寻找间接层来进行操作。

         我们注意到,上面这种方法只是将key映射出来而已,所以我们还是需要使用到get()方法。但是,如果是entrySet()就不需要,因为它映射出来的就是包含key-value的Collection视图。

     
    Set entries = map.entrySet();
    if (entries != null) {
       Iterator iterator = entries.iterator();
       while (iterator.hasNext()) {
           Map.Entry entry = (Entry) iterator.next();
           Object key = entry.getKey();
           Object value = entry.getValue();
        }
    }

    它的使用依然是需要通过Iterator,但是这次我们必须将它强制转型为Map.Entry,这个其实就是相当于一个封装了key-value的对象,并且这个对象可以使用getKey(),getValue()取出对应的key和value,而且我们的操作更多了,因为它是一个对象,方法更多。从效率上看,后面一种速度更快,而且使用起来更加方便,所以,后者是个首选。但是,就算是这种更加方便的方法,其实也是利用第一种方法,就是封装对象的方法,所以如果单单只是存储这种关系并且进行少量的操作,我们可以选择封装对象这个方法,但是如果我们需要经常根据key值来查询大量的数据,就得使用map了。

     
           
  • 相关阅读:
    研究生
    linux下C++开发工具
    GCC and G++ install
    linux yum命令详解
    OpenCV:SURF算法浅析
    linux内核(kernel)版本号的意义
    常见排序算法
    bash:command not found
    C++ 面向对象(数据封装)
    HTML5 script 标签的 crossorigin 和integrity属性的作用
  • 原文地址:https://www.cnblogs.com/wenjiang/p/2733000.html
Copyright © 2011-2022 走看看