之前自己自学了Java,学到集合框架的时候就一脸懵逼,这次在培训班,老师带着复习了一遍,感觉学的还不是很好,所以根据自己的理解总结一下。如果有写的不好的地方欢迎大家批评指正。
1.为什么要引入集合类
目的是为了克服数组的局限性,数组主要有以下两点局限性
- 存储元素个数固定
- 元素类型固定
2.集合概述
- Java中集合类是用来存放对象的
- 集合相当于一个容器,里面包容着一组对象 —— 容器类
- Java API提供的集合类位于java.util包内
- 可以把集合理解为一个微型数据库,既然是数据库,主要操作无外乎“增删改查”
3.集合框架层次结构
4.集合框架基本理解
从层次图中可以看到,顶层有两大基类:Collection和Map
- Collection表示一组纯数据
- Map表示一组Key-Value键值对
Collection
Collection下有两个接口,List接口和Map接口,
- List : 有序的集合,允许重复
- Set :无序的集合,不允许重复
对于List接口,有若干种实现,常用的类有ArrayList、Vector、LinkedList、Stack.
- ArrayList与LinkedList的对比:
(1)ArrayList适用于随机访问,LinkedList适用于顺序访问;
(2)LinkedList更加适用于插入、删除大量元素的情形;
(3)两者都是线程不安全的 - 如果在多线程的程序中要使用到集合框架,并且不希望线程与线程之间相互干扰,那么Vector是不错的选择,Vector是线程安全的。
Map
Map中,key值是唯一的(不能重复),而key对象是与value对象关联在一起的
Map接口有两个实现:
- HashMap — key/value对是按照Hash算法存储的
- TreeMap — key/value对是排序(按key排序)存储的
Iterator
迭代也叫遍历,对于有下标可通过for循环遍历即可,但是Set集合是没有下标的,为此Java提供了迭代器Iterator,专门用于集合的遍历。
- 使用方法iterator()要求容器返回一个Iterator。
- 使用next()获得序列中的下一个元素。
- 使用hasNext()检查序列中是否还有元素。
- 使用remove()将迭代器新返回的元素删除。
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TestIterator {
public static void main(String[] args) {
List l = new ArrayList();
l.add("aa");
l.add("bb");
l.add("cc");
Iterator it = l.iterator();
while (it.hasNext()) {
String str = (String) it.next();
System.out.println(str);
}
}
}
Collections
注意:Colllections不是Collection的复数
区别:
- Collection是接口,是List和Set的父接口
- Collections是工具类,提供了排序,混淆等等很多实用方法
类Collections是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
里面有一些常用的方法,示例代码如下:
import java.util.*;
public class Test{
public static void ret(Object obj)
{
System.out.println(obj);
}
public static void main(String [] args){
List<String> ls = new ArrayList<String>();
ls.add("aaa");
ls.add("bbb");
ls.add("ccc");
ls.add("ddd");
ret(ls);
Collections.sort(ls);
ret(ls);
String tmp = Collections.max(ls);
ret("max :"+tmp);
int index = Collections.binarySearch(ls,"bbb");
ret("index :" + index);
//替换
Collections.replaceAll(ls, "aaa","KK");
ret(ls);
//反转,逆置
Collections.reverse(ls);
ret(ls);
//fill 方法可以将list集合中所有元素转换成指定元素
Collections.fill(ls,"pp");
ret(ls);
}
}