Java中的集合类

  • 集合的概念

        Java中集合类是用来存放对象的

        集合相当于一个容器,里面包容着一组对象——容器类

        其中的每个对象作为集合的一个元素出现

        Java API提供的集合类位于java.util包内

  • Java中数组与集合的比较

        数组也是容器,它是定长的,访问非常快,但是数组不会自动扩充

        数组可以包含基本数据类型或引用类型的对象,而集合中只能包含引用类型的对象

常用的集合类

  • Collection接口

        一组称为元素的对象

        一个Collection中可以放不同类型的数据

        是Set接口和List接口的父类

        是否有特定的顺序以及是否允许重复,取决于它的实现

                Set—无序的集合;不允许重复

                        HashSet

                List—有序的集合;允许重复

                        ArrayList、LinkedList

Set接口

  • Set接口

        Collection的子接口

        用来包含一组无序无重复的对象

                无序—是指元素存入顺序和集合内存储的顺序不用

                无重复—两个对象e1和e2,若果e1.equals(e2)返回true,则认为e1和e2重复

        Set有两种主要的集合实现类:

                HashSet—HashSet的特性在于其内部对象的散列存取,即采用哈希技术

                TreeSet— TreeSet存入的顺序和存储的顺序不同,但是存储是按照排序存储的

List接口

  • List接口

        Collection的子接口

        用来包含一组有序有重复的对象

        List中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素,可以根据序号存取容器中的元素

        List有两种主要的集合实现类:

                ArrayList

                LinkedList

  •  ArrayList类

         ArrayList是线性顺序存储的,是一种线性表

         它的特性和数组很接近,数组大小是不变的,而ArrayList的大小是可以动态改变的

  • ArrayList类的构造方法

        ArrayList 变量名 = new ArrayList();

        ArrayList 变量名 = new ArrayList(int capacity);

        ArrayList 变量名 = new ArrayList(Collection c);

  •  LinkedList类

        是数据结构中链表的java实现

        相对于List来说,LinkedList最主要的功能方面的增强是可以在List的头部和尾部添加、删除、取得元素,直接提供了这些方法的实现。所以它可以非常方便的实现我们数据结构中的常见的Stack(栈)、queue(队列)等

  •  LinkedList类的构造方法

        LinkedList 变量名 = new LinkedList();

        LinkedList 变量名 = new LinkedList(Collection c);

  • Arraylist 与 LinkedList的比较

        存储结构

                ArrayList是线性顺序存储

                LinkedList对象间彼此串连起来的一个链表

        操作性能

                ArrayList适合随机查询的组合

                LinkedList元素的插入和删除操作性高

        从功能上,LinkedLisr要多一些

集合中元素的遍历

  • Iterator接口

        Iterator对象称作迭代器,用来方便的实现对容器内的元素进行遍历操作

        所有实现了Collection接口的集合类都有一个iterator()方法,返回一个实现了Iterator接口的对象

        Iterator对象实现了统一的一个用来遍历Collection中对象的方法

        Iterator是为遍历而设计,能够从集合中取出元素和删除元素,但是没有添加元素的功能

        Iterator的功能上比较简单,使用中,只能单向移动

Iterator<String> iterator=list.iterator();
		while(it.hasNext()){
			String s = iterator.next();
			System.out.println(s);
		}

Map接口

  • Map接口

        Map内存储的是键/值对这样以成对的对象组(可以吧一组对象当成一个元素),通过“键”对象来查询“值”对象

        Map是不同于Collection的另外一种集合接口

        Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的

        Map接口有两个实现:

                HashMap—key/value对是按照Hash算法存储的(按key排序)

  • HashMap类

        基于哈希表的Map接口的实现

        HashMap的构造方法.

               HashMap 变量名 = new HashMap();

               HashMap 变量名 = new HashMap(int capacity);

               HashMap 变量名 = new HashMap(int capacity,float loderFactor);

               HashMap 变量名 = new HashMap(Map m );

集合类的选择

  • 如何选择集合类

        Set存放的元素不允许重复,List存放的元素有一定的顺序

        Map的应用主要在利用键/值对进行快速查询

        ArrayList和LinkedList的区别在于随即查询性能上ArrayList要好,但LinkedList的中间元素的插入与删除性能好

        HashSet和TreeSet的区别在于集合内元素是否排序

泛型的使用

  • 集合在使用上的问题

        集合中的add()方法接受的是一个Object对象的参数,在获取集合中的对象时,必须进行造型(强制类型转换)操作。

        造型操作可能出现问题,一般在程序运行时才能发生,发现问题比较困难

  • 泛型的出现

        在对象放入集合前,为其作个限制

        当获取集合中的对象时,不用进行造型的操作

        当有不同类型的对象添加到集合中的时候,编译时就能检查出错误

  • 泛型的定义

        泛型经常被称为参数化类型,它能够像方法一样接受不用类型的参数

        定义方式 

                ArrayList<E> 变量名;

                E是变量类型



Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐