java集合入门

来源:互联网 发布:网站建设软件 免费 编辑:程序博客网 时间:2024/05/28 11:29

  集合:也叫作容器类--->装数据(对象)
      动态存储多个对象
      动态:容器的大小随着存储的对象的数量而改变
      对象:引用类型:8种基本数据--->包装类类型
   数组:存储相同数据类型的一组数据
1.泛型:
   集合:add(Object obj)--->子类类型
   作用:保护集合中的数据的数据类型安全
2.遍历集合
    官配:迭代器
        集合的第一个元素--->最后一个元素
         iterator()--->Iterator it
           hashNext()--->boolean
            next()--->元素  
       增强for()循环
          for(数据类型 变量名:需要遍历的集合名称)
        List接口遍历可以使用get(index)--->元素 类似数组
本课内容
Set 集合:
     set集合的特点:无序,去重
Object类的相等问题:
      equals()-->比较对象的属性 true false
 实现类
  HashSet :Object类 hashCode()-->对象的哈希码
  HashSet:实现原理
      step1:比较对象哈希码,如果对象的哈希码不同----不同的元素直接存储进hashSet集合
       如果哈希码相同,通过哈希码无法判断是否是重复的元素,进入第二步
      step2:equals()
            true:---->重复的元素  不存储
             false:---->不重复的元素 存储
同时去重写hashCode()和equals()
判断两个对象是否相同--->比较的规则
        属性值相同----》equals()--->Oject类
         this==obj ,子类重写equals()
对于对象
step1;hashCode()--哈希码
每一个对象都有自己的哈希码
哈希码如果不同---》肯定不是相同的元素
如果相同--->可能重复,也可能是不重复的
step2:equals()-->
      属性值:相同-->true 不同-->false


结论:要想使用HashSet去重复的数据,必须重写hashCode()和equals()方法
hashCode的存储原理:1.对象的hashCodes是否相同,如果相同,直接存储,如果相同计入2步:equals(),重写equals方法,对对象的各个属性进行比较



TreeSet:根据比较器:Comparable用途:就是比较对象,对对象排序
Comparable的唯一抽象方法
comparableTo()---》int
正数:当前>被比较对象 存后边
负数:当前对象小  存前面
0:重复数据
HashSet:hashCode()与equals()
TreeSet:Comparable接口的唯一抽象分方法comprableTo()


Map集合
概念:容器 --->映射
   表示一个映射,存储一组数 key-->value
    特点:键和值,是一一对应的。键是不能重复的,value是可以重复的最常用的方法put(key,value)
get(key)根据键值取值
remove(key)
containsKey(“key”)
containsVlaue("value")
keySet()
size()


map中的key的去重复,原set中 的去重复原理
HashMap--->HashSet
TreeMap---->TreeSet

结论:如果map中存储的key,是自定义的类,要求是去重复的.
    如果是hashMap,那么要重写该类的hashCode和equals
    如果是treeMap,那么要让key的类实现Comparable比较器接口.

set.add(s1)
set.add(s2)
set.add(s3)
set.add(s4)


s2.compareTo(s1)
    -1


s3.compareTo(s1)
    -1

s3.compareTo(s2)
    1



s4.compateTo(s1)
    1


Map.Entry


key,value--->entry
阿Sa,阿娇--->twins


map--->
    key,value
    key,value
    key,value
    key,value


Set<Entry>
    key,value-->entry
    key,value-->entry
    key,value-->entry
    key,value-->entry



第一步:map<key,value>--->看成set<组合>:entry

第二步:在set上获取迭代器it-->Iterator<Entry>

第三步:循环迭代---->每一个组合对象:Entry

第四步:从组合中entry-->getKey(),getValue()

Map.Entry:key和value的组合对象.




map<key,value>-->Set<key>

迭代:获取每一个key

map(key)-->value


集合总结:
一、概念:也叫容器
          动态存储多个对象
二、集合的结构
      A。Collection-->每次操作一个对象
        add() clear() iterator()
       子接口:List:有序 可重复 ArrayList (数组的底层结构访问较快修改较慢)LinkedList (双向链表 修改较快访问较慢可以模拟栈(push()pop())和队列(poll() offer()))*Vector(线程安全 但是效率低)
       子接口:Set:无序,去重复
                    实现类:
                    HashSet:实现原理
                    step1:对象hashCode()---->int
                    step2:对象的equals()-->boolean
                TreeSet:实现原理
                   比较器:Comparable接  Comparator 接口
      compareTo( o)--->int
                       this o
                          >0:this 大 o小 排后面
      B.Map-->每次操作2个对象(键值对)
         put(),remove(),size() containsKey() clear() keySet()
存储键值对的映射 键必须去重复 键和值是对应的

HashMap 与HashSet底层实现原理相同
TreeMap 与TreeSet底层实现原理相同
HashMap与HashTable区别:
HashMap是HashTable的代替类,HashTable是旧类已经不经常使用
HashTable中不能出现null,hashMap能出现null对于hashMap来说,null可以作为键值和值,直接作为对象使用,
HashMap父类是Map 和HashTable父类是dictionary不一致

工具类:
Collections类,方法都是静态,
Coolections.addAll(容器,添加什么元素(个数可以多个))//向容器中一次添加多个参数
sort(list)list存储的对象实现了comparable或者comparator
binarySearch()
reverse(()
sychronizedList/Set/Map
接口:Collection
3.泛型
    类、方法、属性
    类上的泛型在创建对象的时候确定类型
    静态方法使用泛型,必须在声明方法的时候单独声明泛型,其类型在传实参的时候确定。
    集合上的泛型 :集合<String> 如List<String>...
    泛型的限定:
          List<?>---->List<Object>   ?代表任意类型 相当于Object
          List<? extends E> 代表能接收的有E类型和E的子类
          List<? super  E> 能够接收的参数有E,E的父类,间接父类都可以





























0 0
原创粉丝点击