集合框架类

数组

  • 创建数组的三种方式
    int[] array1 = new int[5];
    
    int[] array2 = new int[]{1,2,3,4,5};
    
    int[] array3 = {1,2,3,4,5}
  • 数组的属性
    • 一旦创建好,数组的长度就不再改变

Arrays 都是静态方法 是数组的工具类

位于 : java.util

如果数组引用为空,则抛出NullPointerException

  • 常用方法
    sort(int a) //对数组进行排序
    fill(int[] a,int val) //将制动内容填充到数组中
    equals(int[] a,int[] b) //判断两个数组是否相等
    toString(int[] a) //输出数组信息
    deepToString(int[] a) //输出多维数组信息
    deepEquals(int[] a,int[] b) //判断多维数组是否相等

容器类

graph TD
a[java.lang.object]-->b[Map接口]
b-->c[HashMap]
b-->d[TreeMap]
a-->e[Collection接口]
e-->f[Set子接口]
e-->g[List子接口]
f-->h[HashSet]
f-->i[TreeSet]
g-->j[ArrayList]
g-->k[LinkedList]

和集合对比,主要体现在效率,类型,保存基本类型的能力

  • 集合是简单的线性排列,所以速度很快

    • 但是不灵活,一旦创建大小就固定
  • 集合可以直接保存,基本数据类型

  • 容器类保存的是object类型,基本数据类型需要转换成包装类才可以保存(由自动装拆箱完成)

  • ArrayList 底层用数组实现,称为动态数组,不是线程同步的,线程不安全 Object类型

  • Vector 自动增长的对象数组,线程安全,大体上与arrayslist类似 Object类型

ArrayList a = new ArrayList():
a.add("ss");
System.out.println(a.get(0));

get(int index) //获取指定索引处的值
  • HashSet 只能通过迭代器获取值

  • 调用散列函数,储存方式无序不重复,底层用HashMap实现

    • 散列函数就是通过计算得到哈希值,把哈希值作为储存的位置
  • 优点:速度快

  • TreeSet 只能通过迭代器获取值

  • 有序不重复,底层用TreeMap实现

  • Map接口 跟c# python 中的字典类似

Map d = new HashMap();
d.put("a",2); //增加键值对
System.out.println(d.get("a")//通过键获取值);

HashMap 值是无序的

  • 底层由数组构建

  • 影响性能的主要参数是: 底层容量 加载因子

    • 底层容量 底层数组的大小
    • 加载因子 当满足什么条件的时候自动扩容
  • 遍历

  • 第一种转换为entrySet;//效率高O(1)

    Map d = new HashMap();
    d.put("a",2);
    d.put(1,333);
    Iterator e = d.entrySet().iterator(); //把Map类型转换为entry集合的迭代器
    while (e.hasNext()){
        Map.Entry a = (Map.Entry) e.next(); //转换为Map类型
        a.getKey(); //获取键
        a.getValue(); //获取值
    }
  • 第二种转换为keySet;//效率低O(2)
    Map d = new HashMap();
    d.put("a",2);
    d.put(1,333);
    
    Iterator a = d.keySet().iterator(); //把键集合转换为迭代器
    while (a.hasNext()){
        Object c = a.next();    //获取键
        Object e = d.get(c);    //通过获得的键获取值
    }

TreeMap 基于红黑树实现,值是有序的,能够保持固定的顺序

Conllections

  • 是服务于Conllection的工具类

  • 关系类似于 Arrays 对 数组

  • Java对集合的遍历

  • Iterator 遍历迭代,最常见的迭代方式

  • ListIterator : Iterator 的子接口,专门用于迭代List中的元素

  • Enumeration 一个旧的接口类似于 Iterator

  • foreach 可以便利数组和集合 JDK 5 之后增加的

Iterator常用方法

Iterator<T> iterator() //返回T类型的迭代器对象

boolean hasNext();  //是否还可以进行迭代

E next()  //返回E类型的下一个元素

void remove()  //从迭代器的对象中移除返回的最后一个元素

ListIterator常用方法

void add(E e)  //将指定的元素插入列表
boolean hasNext() //是否还可以进行迭代

E next() //返回迭代的下一个元素
boolean hasPrevious()  //如果逆向迭代,返回是否前面还有元素

int nextIndex() //返回下一个元素的索引值

E previous() //返回前一个元素

void set(E e) //用指定元素替换正向,或逆向的最后一个元素
posted @ 2018-05-07 22:21  话少心在  阅读(109)  评论(0编辑  收藏  举报