黑马程序员--java集合(一)

             ------- android培训  java培训、期待与您交流! ----------

一、集合的概念
    什么是集合:集合是容器,长度可变,可以储存任意类型的对象。
          如果储存的是基本数据类型,内部会自动转换为包装类。

    集合与数组的区别:
            数组:长度固定    可以存储基本数据类型,也可以存储对象   存储的对象要是同一类型的
            集合:长度不固定  只能存储对象                          可以存储任意类型的对象(一般都会存储同一类型)
    
二、集合分类
    collection:    一次储存一个对象,单列集合

        List    有索引,可重复
            ArrayList: 数组实现,查找快,增删慢
            LinkedList:链表实现,增删快,查找慢
            Vector      数组实现,线程安全    
    
        Set    无索引,去重复
            HashSet        使用哈希算法去重复,效率高,但无序
            LinkedHashSet    使用哈希算法去重复, 效率高,并且保留存储顺序    是HashSet的子类。
            TreeSet        使用二叉树去重复,可以自定义元素存储的顺序
            

       map:    一次储存两对象,键值对集合

            HashMap        使用哈希算法去重复,效率高,但无序
            LinkedHashMap    使用哈希算法去重复, 效率高,并且保留存储顺序
            TreeMap        使用二叉树去重复,可以自定义元素存储的顺序
            Hashtable    类似HashMap, 线程安全, 效率略低, 不允许null键和null值
            Properties    Hashtable的子类, 用来操作配置文件

三、集合的方法
        add();       向集合中添加元素
        addAll();      向集合中添加另一个集合所有的元素
        remove();      删除集合中指定的元素
        removeAll()   删除两个集合的交集
        retainAll()    保留两个集合的交集
        clear();       移除集合中所有的元素
        contains()     判断集合中是否包含这个元素    
        containsAll()  判断集合中是否包含另一个集合中所有元素
        isEmpty()     判断集合是否为空
        equals()     判断两个元素是否相等
        size()         获取集合中的长度
        hashCode()     获取哈希值
        iterator()     获取迭代器
        toArray()     获取集合转化为的数组
        

四、集合的循环遍历

    collection:
       List  因为List有索引,所以比Set多一个for循环遍历    注:只有List增册改查,因为有索引
        for循环:    从0循环到集合的size()-1, 每次获取其中一个
        迭代器:     通过iterator()方法得到迭代器, 调用hasNext()和next()方法进行迭代
        增强for循环:    for (类型  变量名 : 容器) { 循环体 }
         Set
        迭代器:     通过iterator()方法得到迭代器, 调用hasNext()和next()方法进行迭代
        增强for循环:    for (类型  变量名 : 容器) { 循环体 }
     Map:
        keySet():   得到所有的键组成的Set, 遍历Set得到每一个键, 然后再分别获取值
        entrySet(): 得到所有的Entry组成的Set, 遍历Set得到每一个Entry, 再分别getKey()和getValue()


五、集合循环遍历中的删除
    
        a.for循环:         删除时由于后面的元素会向前移动, 所以删除之后循环变量要--
        b.迭代器:          要删除元素时必须使用Iterator中的remove()否则会抛出异常
        c.增强for循环:        不能删除


六、HashSet
    1.HashSet原理
        我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比较, 效率较低
        哈希算法提高了去重复的效率, 降低了使用equals()方法的次数
        当HashSet调用add()方法存储对象的时候, 先调用对象的hashCode()方法得到一个哈希值, 然后在集合中查找是否有哈希值相同的对象
            如果没有哈希值相同的对象就直接存入集合
            如果有哈希值相同的对象, 就和哈希值相同的对象逐个进行equals()比较
                比较结果为false就存入, true则不存
    2.将自定义类的对象存入HashSet去重复
        类中必须重写hashCode()和equals()方法
        hashCode(): 属性相同的对象返回值必须相同, 属性不同的返回值尽量不同(提高效率)
        equals(): 属性相同返回true, 属性不同返回false


七.TreeSet
    1.特点
        TreeSet是用排序的, 可以指定一个顺序, 对象存入之后会按照指定的顺序排列
    2.使用方式
        a.自然顺序(Comparable)
            TreeSet类的add()方法中会把存入的对象强转成Comparable类型
            调用对象的compareTo()方法和集合中的对象比较
            根据compareTo()方法返回的结果进行存储
        b.比较器顺序(Comparator)
            创建TreeSet的时候可以制定 一个Comparator
            如果传入了Comparator, 那么TreeSet就不会按照自然顺序排序了
            add()方法内部会自动调用Comparator接口中compare()方法排序
        c.两种方式的区别
            TreeSet构造函数什么都不传, 默认按照类中Comparable的顺序(没有就报错ClassCastException)
            TreeSet如果传入Comparator, 就优先按照Comparator


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值