Java集合框架提供了一套性能优良,使用方便的接口和类,它们位于java iava.util包中。因此使用Java集合要导包。
集合框架包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
1.接口
collection接口:存储一组不唯一,无序的对象。
list接口:存储一组不唯一,有序(插入顺序)的 的对象。
set接口:存储一组唯一,无序的对象。
map接口:存储一组键值对象,提供key到value的映射。
2.list接口实现类
1.ArrayList类:实现了长度可变的数组,在内存中分配连续的空间,遍历元素和随机访问元素的效率比较高。
常用方法:
方法名 | 说明 |
boolean add(Object o) | 在列表的末尾顺序添加元素,走起始索引位置从0开始 |
void add(int index,Object o) | 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间,添加数以后,其余的数都往后挪。长度会发生改变。 |
int size() | 返回列表中的元素个数(有效元素个数) |
Object get(int index) | 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 |
boolean contains(Object o) | 判断列表中是否存在指定元素 |
boolean remove(Obiect o) | 从列表中删除元素(元素往前挪) |
Object remove(int index) | 从列表中删除指定位置元素,起始索引位置从0开始 |
1.导入ArraysList类:
import java.util.ArraysList;
2.创建对象:
ArraysList<数据类型> 对象名 = new ArraysList<>;
import java.util.*;
public class Main {
public static void main(String[] args) {
//创建集合
ArrayList list = new ArrayList<>();
//向集合添加元素
list.add(1.0);
list.add(2.0);
list.add(3.0);
//指定位置插入内容,其他内容往后推
list.add(1,4.0);
//替换特定位置的值
list.set(1,5.0);
//根据值删除内容(元素往前移)
list.remove(5.0);
//删除特定位置的元素
list.remove(1);
//创建集合2(用于删除)
ArrayList list1 = new ArrayList<>();
list1.add(1.0);
list1.add(2.0);
//删除list中在集合list1存在的元素
list.removeAll(list1);
//遍历集合
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));//获取指定位置的元素
}
//清空集合
list.clear();
System.out.println(list.size());//集合有效元素的个数(集合长度)
}
}
2.LinkedList类:采用链表存储方式,插入,删除元素时效率比较高。
LinkedList类常用方法:
1.导入LinkedList类:
import java.util.LinkedList;
2.创建对象:
LinkedList <数据类型> 对象名 = new LinkedList<>;
import java.util.*;
public class Main {
public static void main(String[] args) {
LinkedList list = new LinkedList();//创建集合
list.add(1.0);//向集合添加元素
list.add(2.0);
list.add(3.0);
//向集合首部添加元素
list.addFirst(4.0);
//向集合尾部添加元素
list.addLast(6.0);
//获取集合首部元素
list.getFirst();
//获取集合尾部元素
list.getLast();
//删除集合首部元素
list.removeFirst();
//删除集合尾部元素
list.removeLast();
//遍历集合
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
}
3.set接口
1.Set 接口:
是一种比较简单的集合。集合中的对象并不按特定的方式排序,并且不能保存重复的对象(值重复)。
继承Collection接口。
由于Set集合没有索引和get()方法,所以取出方法:迭代器和for增强循环。
2.HashSet:
实现Set接口。
3.TreeSet:
底层数据结构是二叉树。可以对Set集合的元素按照指定规则进行排序。线程不同步的。
import java.util.*;
public class Main {
public static void main(String[] args) {
//set集合唯一、无序
Set set = new HashSet<>();//创建set集合
set.add("a");//向集合中添加元素
set.add("b");
set.add("c");
set.add("d");
set.remove("a");//根据值删除元素
set.contains("a");//判断该元素是否在集合中,返回值类型为boolean
//由于set集合是无序的,而且没有下标所以不能使用get()方法,
//因此遍历集合要使用迭代器或者for增强循环
//迭代器
Iterator iterator = set.iterator();
while(iterator.hasNext()){
//检查序列是否还有下一个元素,返回值类型为boolean
System.out.println(iterator.next());//获得序列中下一个元素
}
//for增强循环
for(Object object : set){
//这里的数据类型为什么要使用Object,
//是因为set集合的数据类型是Object
System.out.println(object);
}
}
}
以下代码验证了set集合唯一指的是值的唯一性。
Set set = new HashSet<>();
String s1 = new String("java");
String s2 = s1;
String s3 = new String("JAVA");
set.add(s1);
set.add(s2);
set.add(s3);
//输出set集合的长度
System.out.println(set.size());//结果:2
Set set1 = new HashSet<>();
String a1 = new String("java");
String a2 = a1;
String a3 = new String("java");
set.add(a1);
set.add(a2);
set.add(a3);
System.out.println(set1.size());//结果:1
4. Map接口
5.Iterator接口
迭代器是一种特殊的接口,用于遍历集合中的元素。
next():获得序列中的下一个元素。
hashNext():检查序列是否还有下一个元素。
remove():将迭代器返回的元素删除。
1.导包
import java.util.Interator;
2.创建迭代器
ArrayList arrayList = new ArrayList();
Iterator iterator = arrayList.iterator();
public class Demo03 {
public static void main(String[] args) {
ArrayList arrayList =new ArrayList();
arrayList.add("aaa");
arrayList.add("bbb");
arrayList.add("ccc");
Iterator iterator = arrayList.iterator();//使用迭代器遍历
while (iterator.hasNext()){
//获取迭代数据
System.out.println(iterator.next());
}
}
}