集合概念
当我们保存一组一样(类型相同)的元素时候,我们应该使用一个容器来存储,就可以采用数组,但是数组存在以下缺点:
1、长度开始时必须指定,一旦指定就不能更改。
2、使用数组进行增加元素的步骤比较麻烦
这时候就可以使用一个更高级的容器“集合”来解决这些问题“
1、可以保存任意多个不同类型的对象,使用方便
2、提供了一系列的操作方法
3、使用集合添加。删除元素时更方便
集合体系概述
java的集合有很多,主要分为两大类
//单列集合
ArrayList arrayList = new ArrayList();
arrayList.add("张三");
arrayList.add("李四");
//双列集合
HashMap hashMap = new HashMap();
hashMap.put("1","a");
hashMap.put("2","b");
Collection接口
Collection接口定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式。
Set中的数据对象不可以重复
List中的数据对象有顺序(添加顺序)且可以重复
List接口及实现类
List继承了Collection接口,有三个实现类
ArrayList:数组列表,数据采用数组方式存储
LinkedList:链表
Vector:数组列表,添加同步锁,线程安全的
ArrayLIst实现了长度可变的数组,在内存中分配连续的空间。
ArrayList接口常用的方法
add(E element):添加单个元素
remove(int index):删除指定元素
contains:查找元素是否存在
size:获取元素个数
isEmpty:判断集合是否为空
clear:清空
import java.util.ArrayList;
public class Demo1 {
public static void main(String[] args) {
//单列集合
ArrayList arrayList = new ArrayList();
//使用add添加元素
arrayList.add("张三");
arrayList.add(666);
arrayList.add(false);
System.out.println(arrayList);
//remove删除指定元素
arrayList.remove(0);//删除第一个元素
System.out.println(arrayList);
//contains查找某个元素是否存在
System.out.println(arrayList.contains(false));//查找false是否在集合之中
//size获取集合长度
System.out.println(arrayList.size());
//isEmpty判断集合是否为空
System.out.println(arrayList.isEmpty());
//clear 清空集合
arrayList.clear();
System.out.println(arrayList);
}
}
List接口集合迭代
1、for循环遍历
2、增强for循环遍历
3、迭代器遍历(Iterator)
import java.util.ArrayList;
import java.util.Iterator;
public class Demo1 {
public static void main(String[] args) {
ArrayList<String> arrayList = new ArrayList();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
arrayList.add("e");
//使用for循环
for (int i = 0; i < arrayList.size(); i++) {
System.out.print(arrayList.get(i) + " ");
}
//使用增强for循环
for (String s:arrayList){
System.out.print(s + " ");
}
//使用迭代器
Iterator<String> it = arrayList.iterator();
while (it.hasNext()){
String s = it.next();
if ("a".equals(s)){
it.remove();
}
System.out.println(s);
}
System.out.println(arrayList);
}
}
Set接口
Set接口继承了Collection接口
Set中所存储的元素时不重复的,但是是无需的,Set中的元素是没有索引的
Set接口有两个实现类
HashSet:HashSet中的元素不能重复
TreeSet:可以给Set集合中的元素进行指定方式的排序。存储的对象必须实现Comparable接口
Set接口集合迭代
遍历方式:
增强for循环
迭代器遍历
Map接口
HashMap
HashMap中的key值不能重复,排列顺序是不固定的,可以存储一个null的键
TreeMap
TreeMap中所有的元素都保持者某种固定的顺序,如果需要得到一个有序的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。
HashTable
实现了同步;不能存储null的键。