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

    集合框架
    一,概念
    1,基本
    1,为了实现某一种特定功能而预先设计好的一系列具有继承或实现关系的类与接口,
    2,操作时可以直接从高层直接开发而不用考虑底层
    3,Java集合框架简称  jcf   Java Collection Framework
    2,最主要的collection
    1,iterator和map与collection是关系型
    2,List和set都是继承collection
    3,collection 是接口
    4,collections 是工具类,用来操作collection
    二,List---中文名叫;列表(继承collection接口)
    1,特点;
    1,线性--以有序的方式存放数据,(放入元素的位置,数组就是线性)有序存放,有下标
    2,掌握:ArrayList、LinkedList
    1、在用法上两者的API完全相同;
    2、调用以后的效果也是一样的。
    3,区别:两个类在底层的实现上,ArrayList采用的是数组的方式进行存储;
    1,LinkedList采用的是双向链表的方式。
    这种区别造成了两个类适用场景的不同:
    LinkedList适用于做大量的往中间添加和删除数据。
    2,ArrayList适用于做大量查询动作或往尾部添加和删除数据;
    3,辨析:ArrayListLinkedListVector
    Vector也是List分支,是ArrayList的兄弟类,底层实现也是数组,
    不同于ArrayList的是它是线程安全的,效率低。
    2,增;
    lst.add("String");
    lst.add(new Date());
    lst.add(new StudentBean("小白", 25, 70));
    lst.add(250);//注意:这是自动封箱,放进去的是一个Integer对象。
    System.out.println(lst.size());//得到集合中元素个数
    3,删
    lst.remove(0);//根据下标进行删除
    lst.remove("String");//根据对象进行删除
    4,改
    lst.set(1, "SSSS");//根据下标完成修改
    5,查
    System.out.println(lst.get(0));//get方法默认返回的是Odject
    6,遍历---掌握1和2,认识3
    1、普通for循环
    for(int i = 0; i < lst.size(); i++){
    System.out.println(lst.get(i));
    }
    2、for-each 循环---JDK1.5以后才有的功能
    for(Object obj : lst){
    System.out.println(obj);
    }
    3,迭代器---Iterator---以前主要用于没有下标的集合类完成遍历,现在被for-each替代
    数组不能用---只有集合能用
    Iterator it = lst.iterator();
    产生和集合对象相关联的迭代器对象
    while(it.hasNext()){
    Object obj = it.next();
    System.out.println(obj);
    }
    二,Set---集,不能存放重复元素;非线性,即无序,没有下标。
    1,特点;
    不能存放重复元素!以无序的方式存放!无下标
    掌握:HashSet
    1、提供了增、删除的行为,删除也只能按对象删除
    2、没有修改和查询指定元素的行为(因为没有下标)
    3、不接受普通for循环。
    2,set集合如何判断两个元素重复:
    1、它不是判断两个元素是否是同一个对象!  
    2、而是先调用两个对象的hashcode方法,判断是否返回同一个值;
    然后再调用equals方法判断是否返回true;
    ----所以根据规范,重写equals方法,同时也要重写hashcode方法
    同样支持泛型
    HashSet<Integer> set = new HashSet<Integer>();
    HashSet set = new HashSet();
    3,增
    set.add("String");
    set.add(new Date());
    set.add(new StudentBean("小样儿", 18, 70));
    set.add(250);
    System.out.println(set.size());//获取元素个数
    set.add(new String("String"));//不能存放重复元素
    set.add(new StudentBean("小样儿", 18, 70));
    System.out.println(set.size());
    4,删---因为没有下标,所以只能根据对象来进行删除
    set.remove(new String("String"));
    System.out.println(set.size());
    5,改---没有提供修改某个指定元素的方法
    6,查---没有获取某个指定元素的方法
    7,遍历---不能用普通for
    1、for-each
    for(Object obj : set){
    System.out.println(obj);
    }
    2、迭代器
    Iterator it = set.iterator();
    while(it.hasNext()){
    System.out.println(it.next());
    }
    三,Map---映射---特点:以键值对的方式存放元素
    1,特点;
    不能存放重复元素,无序的方式存放!无下标,所有数据以key---Value的方式存放
    hashmap 常用
    2,掌握:HashMap的增删查改遍历的API。
    补充掌握:Properties操作文件的方法
    辨析:
    HashMap、Hashtable
    1、两者都是Map分支的实现类,拥有相同的API;
    2、Hashtable是线程安全的,效率低;HashMap是线程不安全的,效率高
    3、Hashtable不允许使用null做键或值,但是HashMap是允许的
    (所有键中只能有一个为null)
    HashMap<String, StudentBean> map = new HashMap<String, StudentBean>();
    Hashtable<String, StudentBean> map = new Hashtable<String, StudentBean>();
    3,增---必须保证键不一样
    map.put("J136001", new StudentBean("乾隆",24,80));
    map.put("J136002", new StudentBean("程骁",28,75));
    map.put(null, new StudentBean());
    map.put("J136004", null);
    System.out.println(map.size());//获取元素个数
    4,删---根据键进行删除,如果键不存在不会报异常只会删除失败
    map.remove("J136003");
    System.out.println(map.size());
     
    5,改---仍然调用put方法,修改传入键所对应的值
    map.put("J136002", new StudentBean("王超",32,70));
    System.out.println(map.size());
     
    6,查---根据键查找值
    StudentBean stu = map.get("J136002");
     
    7,遍历---不能直接遍历Map,只能单独遍历Map的所有键或者所有值
    所以在遍历前,要得到所有的键,或所有的值
    Set<String> keys = map.keySet();//得到所有的键
    Collection<StudentBean> values = map.values();//得到所有的值
    1、for-each
    for(String key : keys){
    System.out.println(key);
    }
    for(StudentBean tmpStu : values){
    System.out.println(tmpStu.getName());
    }
    2、Iterator
    Iterator<String> keyIt = keys.iterator();
    while(keyIt.hasNext()){
    System.out.println(keyIt.next());
    }
     
    Iterator<StudentBean> stuIt = values.iterator();
    while(stuIt.hasNext()){
    System.out.println(stuIt.next().getName());
    }
    8,Hashtable和HashMap的区别
    1,HashMap;
    线程不安全效率高
    可以用null做键和值
    2,Hashtable;
    线程安全效率低
    不可以用null做键和值
     
    五,泛型---限制集合只能存放某种元素的。
    HashMap<String, StudentBean> map = new HashMap<String, StudentBean>();
    <String, StudentBean>
    集合框架类的在默认情况下是可以操作任意数据类型的(Object),这本来是
    集合要解决的数组三大问题之一。但是在实际操作中,往往我们会把相同数据类型
    放到一起做统一处理。----泛型就是用来限制某个集合对象,只能存放某种类型
    的元素。
    六,拼接接口Comparable从写里边的方法设定排序
    当第1个对象根据排序规则所决定的位置  小于 第2个对象根据规则所决定的位置,返回-1
    当第1个对象根据排序规则所决定的位置  大于 第2个对象根据规则所决定的位置,返回1
    当第1个对象根据排序规则所决定的位置  和 第2个对象根据规则所决定的位置 保持相等,返回0
    collections是工具类
    int max = Collections.max(lst);
    int min = Collections.min(lst);
    System.out.println("最大值:" + max);
    System.out.println("最小值:" + min);
    Collections.sort(lst);//自动按照自然排序(即元素类型自带的内部比较规则)进行排列
    Collections.reverse(lst);//对List集合元素进行反转
    Collections.shuffle(lst);//混排---随机排序
    @Override
    public int compare(StudentBean stu1, StudentBean stu2) {
    if(stu1.getScore() > stu2.getScore()){
    return -1;
    }else if(stu1.getScore() < stu2.getScore()){
    return 1;
    }else{
    if(stu1.getAge() < stu2.getAge()){
    return -1;
    }else if(stu1.getAge() > stu2.getAge()){
    return 1;
    }else{
    return 0;
    }
    }
    七,其他
    1,float c=Float.parseFloat(values[2]);字符串转flot
     
     
  • 相关阅读:
    数据收集
    数据展现
    一场媲美“超女”海选的招聘狂潮
    时机论:早起的鸟儿也要选对“用户”季节
    程序设计实践(评注版) 评注者序
    “三低”用户养活的互联网
    芯故事 心感动:英特尔企业文化的力量
    初始化游戏状态数据
    初始化游戏状态数据二
    几个常用的JavaScript字符串处理函数 – split()、join()、substring()和indexOf()
  • 原文地址:https://www.cnblogs.com/zpcbk/p/6431720.html
Copyright © 2011-2022 走看看