Java学习-集合类
一、概念
1.数学中:
集合:指具有某种特定性质的具体的或抽象的对象汇总而成的集体。其中构成集合的这些对象则称为该集合的元素 。
数组:所谓数组,是有序的元素序列。数组是用于储存多个相同类型数据的集合。
2.编程中:
集合类:负责保存、盛装程序创建的对象,因此集合类也被称为容器类;Java集合类存放于 java.util 包中;
数组:数组只能放统一类型的数据,而且一旦在数组初始化时指定了这个数组长度,这个数组长度就是不可变的;
3.注意:
①、集合只能存放对象。比如你存一个 int 型数据 1放入集合中,其实它是自动转换成 Integer类后存入的,Java中每一种基本类型都有对应的引用类型。
②、集合存放的是多个对象的引用,对象本身还是放在堆内存中。
③、集合可以存放不同类型,不限数量的数据类型。
二、集合类的框架
简要说明:
1.Iterator迭代器是遍历集合的接口;
2.Collection是一个对集合概念进行了高度抽象而来的接口,Collection包含了List(有序集合)和Set(无序集合)两大分支;
3.Map是一个映射接口,即key-value键值对;
4.Arrays和Collections,它们是操作数组、集合的两个工具类;
5.Comparable内比较器和Comparator外比较器;
三、框架详解
1.Iterator迭代器
方法:
Object next():返回迭代器刚越过的元素的引用,返回值是 Object,需要强制转换成自己需要的类型;
boolean hasNext():判断容器内是否还有可供访问的元素;
void remove():删除迭代器刚越过的元素;
void forEachRemaining(Consumer<? super E> action):对每个剩余元素执行给定的操作,直到所有元素都被处理或动作引发异常。
应用示例:
package com.jagger.iterator;
import java.util.ArrayList;
import java.util.Iterator;
public class Show {
public static void main(String[] args) {
ArrayList<String> aa = new ArrayList<String>();
aa.add("Zhao");
aa.add("Qian");
aa.add("Sun");
aa.add("Li");
System.out.println("Before Iterator:" + aa);
Iterator<String> it = aa.iterator();
while(it.hasNext()) {
String s = it.next();
System.out.println(s);
}
}
}
consoles输出结果:
Before Iterator:[Zhao, Qian, Sun, Li]
Zhao
Qian
Sun
Li
注意事项:
(1)Iterator只能单向移动。
(2)Iterator.remove()是唯一安全的方式来在迭代过程中修改集合;如果在迭代过程中以任何其它的方式修改了基本集合将会产生未知的行为。而且每调用一次next()方法,remove()方法只能被调用一次,如果违反这个规则将抛出一个并发修改异常。
2.Collection接口
方法:参考jdk
Collection接口有两个主要的子接口List和Set,注意Map不是Collection的子接口,以下进行介绍;
-
list接口
List接口继承于Collection接口,是一个允许重复的有序集合,这里所说的有序是指数据存取上的有序,可以通过类似于数组的索引来访问元素。实现List接口的主要有:ArrayList、LinkedList、Vector、Stack。
(1)ArrayList
ArrayList是一个动态数组,同时ArrayList是非同步的;
(2)LinkedList
LinkedList是一个双向链表,
(3)Vector
Vector与ArrayList相似,但是Vector是同步的。
(4)Stack
Stack继承自Vector,FILO栈。 -
set接口
Set接口继承于Collection接口,是一个不可重复的无序(LinkedHashSet和TreeSet除外)集合,虽然Set中元素没有顺序,但是元素在set中的位置是由该元素的HashCode决定的,其具体位置其实是固定的。Set接口有三个具体实现类,分别是散列集HashSet、链式散列集LinkedHashSet和树形集TreeSet。
(1)HashSet
(2)LinkedHashSet
(3)TreeSet
3.Map接口
Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射;
(1)HashMap
(2)LinkedHashMap
(3)TreeMap