美文网首页
Java集合精讲

Java集合精讲

作者: 释梦石 | 来源:发表于2019-01-10 16:14 被阅读0次

    集合(Collection)

    • 集合的本质是存放大量数据的容器,作用与数组是一样的,用来保存大量相同类型的数据。集合这个容器基本上是不限定数量大小的。
    • 集合本身在Java程序中就是一系列接口,类的组合。集合在Java程序中也是一个框架结构。
    • 集合本身提供了大量的接口和类,可以实现我们对大量数据的操作。
    • 集合是java提供的工具包,Java集合工具包位置是java.util.*

    集合的框架结构

    1、Collection接口

    Collection接口是集合的顶层接口。常用的子接口有:List接口,Set接口,其中,List接口中元素有序可重复,Set接口中元素无序且不可重复。

    2、Map接口

    Map接口是一种“键-值映射”的集合,该接口不是Collection的子接口。在Map中存放的数据是两部分组成的,一部分叫键(key),一部分叫值(value)。Map接口中元素无序,键不可重复。

    3、框架结构图显示如下:

    集合完整框架图 集合简化框架图

    集合常用实现类

    List接口的常用实现类:ArrayList

    内部存储的数据结构是数组存储。元素可以快速访问。每个元素之间是紧邻的不能有间隔,比较消性能。从ArrayList中间位置插入和删除元素,都需要循环移动元素的位置,所以,Array List适合随机查找和遍历,不适合经常需要插入和删除操作。

    1. 构造方法,构造一个能构造一个能够存放数据类型<T>的空列表。
    2. 增加:add(T t)方法,将对象保存到集合中。ArrayList是一个可变长度的数组。数组中使用索引。ArrayList集合也是使用索引的方式保存数据。每一个数据在放到ArrayList集合时都有一个索引的编号 。从0开始。顺序向下。
    3. 取值:get方法, 格式:<T> get(int index):int index是数据在ArrayList集合中的索引。
    4. 获取集合大小:int size();
    5. 集合迭代:for循环,1.5之后支持foreach循环
    6. 判断集合是否为空:isEmpty();
    7. 判断集合中是否有该元素:contains(Object);

    List接口的常用实现类:LinkedList

    内部存储用的数据结构是链表。适合动态的插入和删除。访问遍历比较慢。LinkedList是线程不安全的。

    1. 查询速度:ArrayList快。
    2. 删除一个元素:LinkedList快。
    3. 插入一个元素:LinkedList快。
    4. 如果集合经常的操作是迭代整个集合,选择ArrayList。
    5. 如果集合操作是插入一个元素,删除一个元素,选择LinkedList。

    List接口的常用实现类:Vector

    是线程安全的集合类,速度慢。

    1. 内部实现和ArrayList一样都是数组存储。
    2. Vector支持线程的同步,所以访问比ArrayList慢,但是数据安全。
    3. 对元素的操作没有并发操作的时候用ArrayList比较快。

    Set接口常用实现类:HashSet

    由哈希表(实际上是 HashMap实例)支持;它不保证集合的迭代顺序;特别是它不保证元素顺序会随着时间的推移保持不变;该类允许null元素存在,称为散列集

    1. 构造方法:Set<String> strSet = new HashSet<String>();
    2. 增加:add方法,在调用add方法时,HashSet会自动调用实体类的hashCode和equals方法。当两个方法返回的值hashCode一致,equals方法为true时,则认为是同一个对象。就认为有重复方法。如果发现了重复增加数据会?不再执行增加操作。
    3. 迭代:Set接口本身是无序的,所以没有get(int)这类的方法。针对Set集合能做的只有迭代。1.5之前使用Iterator迭代器对象。1.5之后使用foreach循环迭代

    Set接口常用实现类:TreeSet

    使用元素的自然顺序对元素进行排序

    1. TreeSet类是一个有序的类,调用add方法时,在将对象增加到集合时就一定要保证数据的顺序。
    2. TreeSet类使用自然序进行排序 。所以当add方法时,增加的对象一定要实现Comparable接口

    Map接口常用的实现类:HashMap

    Map接口是一种“键-值”映射的集合。HashMap是一种以散列存储方式进行的“键-值”映射的集合。所有Map类都只针对“键(key)”进行判断和处理。当我们判断一个Map中是否包含元素时比较的是“键(key)”。Map中“键(key)”是唯一的。

    1. 创建对象:泛型有两个“key,value”
    Map<String,String> map = new HashMap<String,String>();
    
    1. 存储数据:put(key,value),key对于开发者应该是透明的。在使用put保存“k-v”时,通过调用"key"的equals方法验证“key”是否重复。如果在put时发现“key”重复,则实现用新的value来修改原来的value。用新的覆盖旧的
      3.取值:用key取value
    String value = map.get("key");//通过“键(key)”来取“值(value)”
    

    4.迭代:1.5之前,先将Map集合的所有key取出来转换成Set集合,再迭代Set集合获取每一个key,再通过每一个key取value。

    Set<String> keySet = map.keySet();
    Iterator<String> keySetIterator = keySet.iterator();
    while(keySetIterator.hasNext()){
        String key = keySetIterator.next();
        String value = map.get(key);
    }
    

    1.5之后,先将map转换成Set<Entry>,每一个Entry对象表示了一组“k-v”的值。之后迭代Set<Entry>,获得每个key和value

    Set< Entry<String,String> > entrySet = map.entrySet();
    for( Entry<String,String> entry : entrySet){
          String key = entry.getKey();
          String value = entry.getValue();
    }
    

    Map接口常用的实现类:TreeMap

    TreeSet支持两种排序方法:自然排序和定制排序。TreeSet默认采用自然排序。

    1. 根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。

    更多文章: http://tryenough.com/

    相关文章

      网友评论

          本文标题:Java集合精讲

          本文链接:https://www.haomeiwen.com/subject/hqrwlqtx.html