Java Collections框架

Java Collections框架主要提供了List(列表)、Queue(队列)、Set(集合)、Stack(栈)和Map(映射表,用于存放键值对)等数据结构。其中,List、Queue、Set、Stack都继承自Collection接口。

Collection是整个集合框架的基础,它里面存储一组对象,表示不同类型的Collections,它的作用只是提供维护一组对象的基本接口而已。

下面分别介绍Set、List、Map 3个接口。

  • Set 表示数学意义上的集合概念。其最主要的特点是集合中的元素不能重复,因此存入Set的每个元素都必须要定义equals()方法来确保对象的唯一性。该接口有两个实现类:HashSet和TreeSet。其中TreeSet实现了SortedSet接口,因此TreeSet容器中的元素是有序的。
  • List 又称为有序的Collection。它按对象进入的顺序保存对象,所以它能对列表中的每个元素的插入和删除位置进行精准的控制。同时,它可以保存重复的对象。LinkedList、ArrayList和Vector都实现了List接口。
  • Map 提供了一个从键映射到值得数据结构。它用于保存键值对,其中值可以重复,当键是唯一的,不能重复。Java类库中有很多个实现该接口的类:HashMap、TreeMap、LinkedHashMap、WeakHashMap和IdentityHashMap。虽然它们都实现了相同的接口,当执行效率却不是相同的。具体而言,HashMap是基于散列表实现的,采用对象的HashCode进行快速查询。LinkedHashMap采用列表来维护内部的顺序。TreeMap基于红黑树的数据结构来实现的,内部元素是按需排序的。

引申:Collection和Collections有什么区别?
1、java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。
2、java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。若在使用Collections来的方法时,对应的collection的对象为null,则这些方法就会抛出NullPointerException
使用Collections的示例代码:

import java.util.*;

public class CollectionsDemo {
    public static void main(String[] args) {
        List<Integer> list=new LinkedList<Integer>();
        int array[]={1,5,8,14};
        for (int i=0;i<array.length;i++){
            list.add(new Integer(array[i]));
        }
        Collections.sort(list);
        //list.sort(Comparator.comparing(Integer::intValue));
        //list.sort(Comparator.comparing(Integer::intValue).reversed());
        System.out.println(list.toString());
    }
}

什么是迭代器
迭代器(Iterator)是一个对象,它的工作是遍历并选择序列中的对象,它提供了一种访问一个容器(container)对象中的各个元素,而不必暴露该对象内部细节的方法。通过迭代器,开发人员不需要了解容器底层的结构,就可以实现对容器的遍历。由于创建迭代器的代价小,因此迭代器通常被成为轻量级的容器。
迭代器的使用主要有以下3个方面的注意事项:

  • 使用容器的iterator()方法返回一个Iterator,然后通过Iterator的next()方法返回第一个元素。
  • 使用Iterator的hasNext()方法判断容器中是否还有元素,如果由,可以使用next()方法获取下一个元素。
  • 可以通过remove()方法删除迭代器返回的元素。
    Iterator支持派生的兄弟成员。ListIterator只存在于List中,支持在迭代期间向List中添加或删除元素,并且可以在List中双向滚动。
    Iterator的使用方法如下列代码:
import java.util.*;

public class IteratorDemo {
    public static void main(String[] args) {
        List<String> list=new LinkedList<String>();
        list.add("first");
        list.add("second");
        list.add("third");
        list.add("fourth");
        for (Iterator<String> iterator=list.iterator();iterator.hasNext();){
            String string= iterator.next();
            System.out.println(string);
        }
        /*for (String str:list){
            System.out.println(str);
        }*/
    }
}

运行结果为:

first
second
third
fourth

在使用iterator()方法时经常会遇到ConcurrentModificationException(并发修改异常)异常,这通常是由于在使用Iterator遍历容器的同时又对容器做增加或删除操作所导致的,或者由于多线程操作导致的,当一个线程使用迭代器遍历容器的同时,另外一个线程对这个容器进行增加或删除操作。

引申:Iterator和ListIterator有什么区别?
Iterator只能正向遍历1集合,适用于获取移除元素。ListIterator继承自Iterator,专门针对List,可以从两个方向来遍历List,同时支持元素的修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值