天天看点

【Java】对象群体的组织集合概览Map

集合概览

数组的优点

•是Java提供的随机访问对象序列的最有效方法

•是一个简单的线性序列,访问元素的速度较快

•数组的缺点:大小自创建以后就固定了,在其整个生存期内其大小不可改变

•数组元素只能是同一类型

集合(Collection)

•可动态改变其大小

•可在序列中存储不同类型的数据

把具有相同性质的一类东西,汇聚成一个整体

•在Java2中有很多与集合有关的接口及类

•它们被组织在以Collection及Map接口为根的层次结构中,称为集合框架

•在Java2之前,在Java 1.0/1.1中,没有完整的集合框架。只有一些简单的可以自扩展的容器类

•Vector •Hashtable

简单来说,集合就是用来存储对象的容器

由来:

对象用于封装特有数据,对象多了需要存储,如果对象个数不确定,就用集合容器进行存储

特点:

  1. 用于存储对象的容器
  2. 集合长度是可变的
  3. 集合中不可以存储基本数据类型

针对不同用途有不同容器,依据不同的用途用不同的容器

集合容器因为内部的数据结构不同,有多种具体容器。

不断向上抽取,就形成了集合框架。

框架顶层Collection接口

常见方法:

  1. 添加

    boolean add(Object obj);

    boolean addAll(Collection coll);

public static void show(Collection coll){
	coll.add("abc");
	System.out.println(coll);
}
           
  1. 删除

    boolean remove (Object obj);

    boolean removeAll(Collection coll); //将两个集合中的相同元素从调用removeAll的集合中删除

    void clear();

  2. 判断

    boolean contains(Object obj);

    boolean containsAll(Collection coll);

    boolean ifEmpty();判断集合中是否有元素

  3. 获取

    int size();

    Iterator iterator();取出元素的方式:迭代器

Collection coll = new ArrayList();

coll.add("abc1");
coll.add("abc2");

Iterator it = coll.iterator();
//两种方式:
//第一种方式:
while(it.hasNext()){
	System.out.println(it.next());
}

//第二种方法:
for(Iterator it = coll.iterator();it.hasNext();){
	System.out.println(it.next());
}


           

该对象必须依赖于具体容器,因为每一个容器的数据结构不同

所以该迭代器对象是在容器内部实现的

对于容器使用者而言,具体的实现不重要,值要通过容器获取到该实现的迭代器对象即可,也就是iterator方法

Iterator接口就是对所有的Collection容器进行元素取出的公共接口

  1. 其他

    boolean retainAll(Collection coll);取交集

    Object[] toArray();将集合转成数组

常用子接口

List和Set

List

有序的collection(也称为序列),此接口的用户可以对列表中每个元素的插入位置进行精准的控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素

与set不同,元素可以重复

特有的常见方法:

有一个共性特点就是可以增加角标

  1. 添加
void add(index,element);
void add(index,collection);
           
  1. 删除
  1. 修改
  1. 获取
Object get(index);

for(int i=0;i<list.size();i++){
	System.out.println(list.get(i));
}



int indexOf(object);
int lastIndexOf(object); 
List sublist(from,to);
           

在使用迭代器的时候不能进行集合操作,否则会造成并发错误

这时候我们需要使用iterator的子接口listIterator()方法,来完成迭代过程中对集合的操作

有三个常用对象:

  1. Vector:(内部是数组数据结构)可以实现可增长对象数组,Vector大小可以根据需要增大或缩小,以适应创建Vector后进行添加或移除项的操作
  2. ArrayList:内部是数组数据结构,是不同步的。替代了Vector。
  3. Linkedlist:内部是链表数据结构,是不同步的

Set

不包含重复元素,无序。

Map

一次添加一对元素

将键映射到对象,map集合必须保证键的唯一性

  1. 添加

    value put(key,value);