zoukankan      html  css  js  c++  java
  • 集合框架

     
    框架:为了实现某一种特定功能而预先设计好的,一系列具有继承或实现关系的类与接口,操作时可以直接从高层进行开发而不必关注底层的实现。
     
    java集合框架简称为:JCF
    J:java
    C:collections
    F:frame
     
     
    1、集合:Collection整个集合框架的核心接口(集合根接口):直接衍生List,Set,间接衍生Map(组合Collection)
    2、工具类:Collections Arrays
    3、比较器:Comparable Comparator
     
    目标:增删查改,以及遍历(关键)
    List:列表
    特点:线性--以有序的方式存放数据(链表就是),最大
    特点(有下标);
    掌握:ArrayList、LinkedList
    方法:
    ---.add();
    ---.size();
    ---.remove("下标/具体某元素(只会删除以一个)");
    ---.get();查询----默认返回的是Object,所以需要强转
    ---.set();根据下标改
    遍历:
    ---普通for循环
    ---for-each循环(JDK1.5以后的功能,就用迭代器)
    for(Object obj : obj){
     
    ---迭代器(JDK1.5以后很少用)(可能维护老代码,可能会用到)
    ---以前专用与没有下标的集合类完成遍历,现在被for-each替代
    ---可以理解为零时的盒子,理解为将lis中的数据全部放进去,
    ---Iterator it = lis.interator();
    ---it.hasNext();//判断有没有下一个,有true
    ---it.next();//取
    区别掌握:
    1、ArrayList采用的是数组的方式进行存储
    2、Linkedlist采用的是链表的方式进行储存:而且是双向链表
    这种区别造成了使用场景的差异:查询(ArrayList快)快增删(中间Linkedlist快)(末尾ArrayList快)
    1、ArrayList:适用于做大量的查询工作,或往尾部增加和删除数据
    2、Linkedlist:适用于做大量的往中间添加和删除数据
    辨析:ArrayList、LinkedList、Vector
    1、Vector也是List的分支,是ArrayList的兄弟类,底层实现也是数组
    2、不同:Vector是线程安全的(线程同步),效率低
    LinkedList:实现接口
    1、queue:队列
    ---通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素
    方法:
    ---offer(E e); 指定元素插入队尾(为什么不用add();当达到容器装满之后会抛异常)
    ---peek(); 获取队头元素,不移除;队列为空返回null
    ---poll(); 获取队头元素,并且移除;队列为空返回null
    ---remove(); 同上poll();但是为null时会抛异常
    ---element(); 获取但不移除对头,null抛异常
    2、qeque:
    Set:
    特点:集--,不能存放重复元素,非线性,即无序,没有下标(是按照哈希值顺序放的)
    掌握:HashSet
    ---1、提供了增加删除的行为(只能按照对象删除)
    ---2、没有修改指定和查询的行为(因为没有下标)
    ---3、不解释普通for循环
    方法:
    ---.add();//增(不能放重复元素 )
    ---.size();//获取长度
    ---.remove( Object);//没有下标所以只能根据对象进行删除
    ---没有改的方法
    ---没有查询获取某个指定元素的方法
    遍历:
    ---for-each
    ---迭代器
    判断:Set集合如何判断两个元素重复
    ---不是判断两个元素是否是同一对象
    ---而是:先调用两个对象的hashcode方法,判断是否返回同一个值;
    然后调用,equals方法判断是否放回true;
    所以根据规范,重写equals同时也要重写hashcode方法
    Map:映射
    特点:key-value(键值对):无序,key不重复,value可以重复,无下标;
    掌握:hashMap
    补充掌握:Properties操作文件的方法
    辨析:
    HashMap、Hashtable
    1、两个都是Map分支的实现类,拥有相同的API
    2、不同:
    ---HashMap是线程不安全的,线程不同步,效率高;
    ---Hashtable是线程安全的,同步的,效率低;
    ---HashMap可以用空做键key=null,也可用空来做值value=null;Hashtable不允许;
     
    HashMap: ---HashMap<String, Student> map = new HsahMap<String, Student>();
    方法:
    ---.put(key, value); 改,如果key不存在,则增加-必须保证键不一样;
    ---.remove(key, value);删除,key不存在只会失败,不会异常,返回删除的value
    ---.size();获取元素个数
    ---.get(key);获取(查),如果没有(null)
    遍历:
    ---不能直接遍历Map,只能单独遍历所以的键或者所有的
    ---在遍历之前先获取所有的键值(key)和所有的值(value);
    ---键值(key):Set<E> keys = map.keySet();
    ---值(value)Collection<E> value = map.value();
    ---然后用for-each或者迭代器遍历;
     
    如何遍历键值对:
    Set<Entry<String, Integer>> entrySet = map.entrySet();
    for (Entry<String, Integer> entry : entrySet) {
    System.out.println(entry);
    }
    泛型:
    框架的类在默认情况下是可以操作任意数据类型的(Object),这本来是集合要解决的数组三大问题之一。但是在实际场景中,我们往往是把同一数据类型放在一起做同一处理。
     
    作用:
    ---用来限制某个集合对象只能存放某种类型的元素。
     
     
    Collections:集合工具类
    方法:
    ---Collections.min(list);最小
    ---Collections.max(list);最大
    ---Collections.sort(list);排序,自然排序(及元素类型自带的内部比较规则)(默认内部比较器Comparator
    ---Collections.sort(list, Co);//调用外部比较器
    ---Collections.shuffle(lst);//混排---随机顺序
     
    Comparable<E>
    内部比较器:写在元素类型的身上
    重写compareTo
    ---当当前对象根据排序对象所决定的位置 小于 指定对象根据规则所决定的位置 ,返回-1
    ---当当前对象根据排序对象所决定的位置 大于 指定对象根据规则所决定的位置 ,返回1
    ---当当前对象根据排序对象所决定的位置 等于 指定对象根据规则所决定的位置 ,返回0
     
    Comparator
    定义一个实现Comparator<E>的类
    ---写一个比较方法
    排序调用Collections.sort(List对象,外部比较器);
    当传入外部比较器进行排序时,就是List中的元素有内部的比较器,也以外部为准;
    ---第一个对象根据排序对象所决定的位置 小于 第二个对象根据规则所决定的位置 ,返回-1
    ---第一个对象根据排序对象所决定的位置 大于 第二个对象根据规则所决定的位置 ,返回1
    ---第一个对象根据排序对象所决定的位置 等于 第二个对象根据规则所决定的位置 ,返回0
     
    如何区别使用:
    ---把最常用的排序写到内部(自然排序)
    ---较少使用的写到外部比较器中
  • 相关阅读:
    查找整数
    寒假作业3
    寒假作业2
    寒假作业1
    秋季学期总结
    对自己影响最深的三位老师
    自我介绍
    jquery学习笔记
    素材网站
    转:vim模式下报错E37: No write since last change (add ! to override)
  • 原文地址:https://www.cnblogs.com/houxi1234/p/6431210.html
Copyright © 2011-2022 走看看