• java 集合


    1。为什么Set及子类中没有提供随机取元素的方法

    在List中提供了get等方法来实现随机取在容器中的元素,但是,为什么在Set中没有提供呢,如果要在Set及子类中实现随机读取元素,该怎么操作,不可能自己去遍历或将Set存到List中去吧。

    set是一个集合,集合就是一堆东西的意思,set中的东西是不重复的,即使你放了两个一样的东西,set只会保留一个;set是不能随机存取的,而且set的顺序是不固定的,读的顺序跟你存的顺序也是不同的,这是由set的性质决定的。而list是链表的意思,存取的顺序是固定的,所以可以随机读。如果要随机存取,那就用list吧。

    java hashmap常见用法

     

    1.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。

    2.hashmap遍历的两种方法,通过set<map.entry>集合,或者通过keySet集合

    复制代码
    1.通过keySet集合遍历       
    Set<String> ketSet = hashMap.keySet(); Iterator<String> keyIterator = ketSet.iterator(); while(keyIterator.hasNext()) { Object object = keyIterator.next(); System.out.println("key set is:"+object+":"+hashMap.get(object)); }
    复制代码

    以HashSet为例,源码中有这么几行代码 

    Java代码  收藏代码
    1.    private transient HashMap<E,Object> map;  
    2.      
    3.    // Dummy value to associate with an Object in the backing Map  
    4.    private static final Object PRESENT = new Object();  
    5.   
    6.    /** 
    7.     * Constructs a new, empty set; the backing <tt>HashMap</tt> instance has 
    8.     * default initial capacity (16) and load factor (0.75). 
    9.     */  
    10.    public HashSet() {  
    11. map = new HashMap<E,Object>();  
    12.    }  
    13.   
    14.    public boolean add(E e) {  
    15. return map.put(e, PRESENT)==null;  
    16.    }  



    可以明显看出,HashSet的本质是一个Map,Map的key就是HashSet加入的值,Map的value都是PRESENT(Object的实例)。Map是怎么存储的?HashMap是随机存储的,只能通过key来get,没有顺序遍历。

    而List的本质是一个数组,当然可以通过get(index)获取 

    如果还不是很清楚,建议看看List ArrayList LinkedList Set HashSet TreeSet 的源码,也不要被源码吓到,很简单的,我都看懂了

  • 相关阅读:
    UINavigationBar 调整
    UILabel根据内容自动调整高度
    [iOS开发]文档导读
    [iOS开发]NSUserDefaults使用注意
    Xcode 断点的使用
    [iOS开发] UIKit Dynamics
    [iOS开发]ShareSDK
    objective-c GCD
    面向对象设计原则
    Go语言学习教程:go语言的包管理
  • 原文地址:https://www.cnblogs.com/panxuejun/p/5886360.html
Copyright © 2020-2023  润新知