集合框架(set、Map、Collections)

List
    有序 :访问顺序和插入顺序一致
    
    添加了根据下标来操作元素
Set
    参考 数学上集合的概念
    无序(访问顺序和插入顺序不一致)
    不允许重复
    可以null
    
    没有添加额外的方法
    HashSet 最常用的实现类,此实现不是同步的
        实际上是一个 HashMap 实例
    LinkedHashSet
        维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序
        保证访问顺序和插入顺序一致
    TreeSet
        底层实现:红黑树
        使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
        根据Comparable接口中compareTo方法来判断元素是否重复的,不是equals() 
        但是一个类中同时有这两个方法时,相等的逻辑要一致
        
    练习:Student 使用集合存储        姓名 ,出生日期MyDate(年月日)
        要求输出,按照出生日期有小到大排序
    
    
    
Map 两列集合
    键映射到值---参考函数  y=x^2    ---键值对  Set<Node>
    一个映射不能包含重复的键---键唯一(set)
    每个键最多只能映射到一个值 ---一对一,多对一(Collection)
        
    V get(Object key) 根据键获取值 
    V put(K key, V value) 添加
    V remove(Object key)  移除
     
    boolean containsKey(Object key)  
    boolean containsValue(Object value) 
     
    Set<K> keySet()  
    Collection<V> values() 
    Set<Map.Entry<K,V>> entrySet()   
    
    具体实现类
    HashMap 最常用
        允许使用 null 值和 null 键
        不是同步的
        
        实现原理:
            jdk1.7   数组+链表
            jdk1.8  数组+链表/红黑树
        
            Node<K,V>[] table
            jdk1.8
            1、调用无参构造初始化时,没有申请空间
            2、第一次put对象的时候,申请长度为16的数组空间Node<K,V>[] table
            3、添加数据的时候,先计算hash值(会调用到hashCode()),确定元素在数组中的位置i
            4、判断i位置上是否已经有对象,
                如果没有,直接添加到数组i位置上----存
                如果有(哈希冲突),当前对象和i位置上对象进行比较(key的hash,equals)
                    如果相等,就把value覆盖---修改
                    如果不相等,遍历此位置上链表中存储的每一个对象进行比较(key的hash,equals)
                        如果存在相等,就把value覆盖---修改
                        如果不存在相等,直接添加到链表中(如果链表中数据量超过8,则使用红黑树存储)----存
            
            综上,key的hashCode    和equals()不相等,对象才会被存储    ,否则是被修改    
                        
            
    LinkedHashMap
        维护插入顺序的
    Hashtable  
        不允许使用 null 值和 null 键e
        同步的

Collections 工具类    
    addAll(Collection<? super T> c, T... elements) 
    binarySearch(List<? extends Comparable<? super T>> list, T key)  要求集合升序
    sort(List<T> list) 根据元素的自然顺序 对指定列表按升序进行排序。 
    sort(List<T> list, Comparator<? super T> c) 
     max(Collection<? extends T> coll) 
     min(Collection<? extends T> coll) 
     reverse(List<?> list)  反转指定列表中元素的顺序
     shuffle(List<?> list) 打乱顺序,重新洗牌
     fill()
     
     List和数组怎么转换
     List--数组  List:Object[] toArray()
     数组--List Arrays:List<T> asList(T... a)
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
        

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值