在开始讲集合之前,我们先说一下数组和集合的区别:

  • 数组是大小固定的;同一个数组只能存放类型一样的数据(基本类型,如int/引用类型);可创建可读并可写的数组,但不能创建只读的;操作快
  • 集合大小事可变的;同一个集合只能存放引用类型的的数据(不能存放基本数据类型,但能存储基本类型的包装类,如Integer);可创建只读的的集合;功能多
  • 容器类仅能持有对象引用(指向对象的指针),而不是将对象信息copy一份至数列某位置
  • 一旦将对象置入容器内,便损失了该对象的型别信息

以下这张图表明了集合的结构,集合的父接口为Collection:

【Java基础】集合collection-LMLPHP


以下表格表明了3种集合的区别:

TreeMap,TreeSet,Tree*都是有序的
  • 没有继承于Collection接口
  • 是一种映射
  • 是一种把键对象和值对象映射的集合,它的每一个元素都包含一对键对象和值对象。

主要的两个实现类:

1.HashMap

  • HashMap:用到了哈希码的算法,以便快速查找一个键,无法估测元素存放的位置;

  • HashMap使用了特殊的值,称为“散列码”(hash code),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法,HashMap就是使用对象的hashCode()进行快速查询的。此方法能够显着提高性能

2.TreeMap

  • TreeMap:用到了二叉树算法,根据键按序存放,是可以估测元素存放的位置;
  • 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。TreeMap是唯一的带有subMap()方法的Map,它可以返回一个子树。
  • 继承于Collection接口
  • 是一种列表
  • 是其元素以线性方式存储,集合中可以存放重复对象,最大特点是元素有序
  • 以Array为基础

主要的两个实现类:

1.ArrayList

  • 长度可以改变的数组结构。存储方式类似与数组,所以访问速度快,可对元素进行随机的访问,向ArrayList()中插入与删除元素的速度慢
  • 适合查

2.LinkedList

  • 链表数据结构。插入和删除速度快(因为只需要改变元素存放的下一个元素地址),访问速度慢(因为通过链接递归地往下找)
  • 适合增删
  • 继承于Collection接口
  • 最简单的一种集合
  • 集合中的对象不按特定的方式排序
  • 存放的是对象的引用,没有重复对象
  • 以HashMap为基础,存储方式是把HashMap中的Key作为Set的对应存储项
  • 拥有和Collection一模一样的接口
Set set=new HashSet();
 String s1=new String("hello");
 String s2=s1;
 String s3=new String("world");
 set.add(s1);
 set.add(s2);
 set.add(s3);
 System.out.println(set.size());//打印集合中对象的数目 为 2

主要的两个实现类:

1.HashSet

  • 按照哈希算法来存取集合中的对象,存取速度比较快
  • 放到HashSet中的对象需要实现hashCode()方法

2.TreeSet

  • 将放入其中的元素按序存放,这就要求你放入其中的对象是可排序的,这就用到了集合框架提供的另外两个实用类Comparable和Comparator。一个类是可排序的,它就应该实现Comparable接口。有时多个类具有相同的排序算法,那就不需要在每分别重复定义相同的排序算法,只要实现Comparator接口即可

【总结】

  • 最常用的是ArrayList,HashSet,HashMap,Array
  • Collection和Map的区别:Collection类型者,每个位置只有一个元素。 Map类型者,持有 key-value
    pair,像个小型数据库
  • 集合框架中还有两个很实用的公用类:Collections和Arrays。Collections提供了对一个Collection容器进行诸如排序、复制、查找和填充等一些非常有用的方法,Arrays则是对一个数组进行类似的操作
10-03 17:35