集合框架类

数组

  • 创建数组的三种方式

    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 中的字典类似

    ```Java
    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

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) //用指定元素替换正向,或逆向的最后一个元素
```

猜你喜欢

转载自www.cnblogs.com/fiwen/p/9005385.html
今日推荐