集合框架/后续补全
简介
集合框架:用于存储数据的容器。
集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。
任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。
Collection接口
- 集合框架的顶级接口
- 是Set和List的父接口
- 但不是Map的父接口
所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
Collection关系继承图:
Collection集合主要有List和Set两大接口
-
List:有序(元素存入集合的顺序和取出的顺序一致),元素都有索引。元素可以重复。
-
Set:无序(存入和取出顺序有可能不一致),不可以存储重复元素。必须保证元素唯一性
List接口
集合和数组的区别
-
数组是固定长度的;集合可变长度的。
-
数组可以存储基本数据类型,也可以存储引用数据类型;集合只能存储引用数据类型。
-
数组存储的元素必须是同一个数据类型;集合存储的对象可以是不同数据类型。
数据结构:就是容器中存储数据的方式。
as | ArrayList | LinkedList | Vector |
---|---|---|---|
底层实现 | 数组 | 双向链表 | 数组 |
同步性及效率 | 不同步,非线程安全,效率高,支持随机访问 | 不同步,非线程安全,效率高 | 同步,线程安全,效率低 |
特点 | 查询快,增删慢 | 查询慢,增删快 | 查询快,增删慢 |
默认容量 | 10 | / | 10 |
扩容机制 | int newCapacity = oldCapacity + (oldCapacity >> 1);//1.5 倍 | / | 2 倍 |
简单常用的遍历方式(附带小案例:子弹夹)
public class Dome {
static LinkedList lk = new LinkedList<>();
public static void main(String[] args) {
List myl = new ArrayList<>();
myl.add("1");
myl.add("2");
myl.add("3");
myl.add("4");
myl.add("5");
myl.add("6");
myl.add("7");
myl.add("8");
myl.add("3");
/**
* 集合取值方式:第一种foreach循环取值
*/
// for (Object o : myl) {
// System.out.println("foreach循环取值"+o);
// }
/**
* 集合取值方式:第二种for循环取值
*/
// for (int i = 0; i < myl.size(); i++) {
// System.out.println("for循环方式取值"+myl.get(i));
// }
/**
* 集合取值方式:第三种iterator方式取值
*/
// Iterator myi = myl.iterator();
// while(myi.hasNext()) {
// Object next = myi.next();
// System.out.println("iterator方式取值:"+next);
// }
// 实例
Dome dome = new Dome();
dome.push("1");
dome.push("2");
dome.push("3");
dome.push("4");
dome.push("5");
dome.push("a");
dome.push("b");
dome.push("c");
dome.push("d");
dome.push("A");
dome.push("B");
dome.push("C");
// dome.pup();
for (Object o : lk) {
System.out.println(o);
}
}
/**
* 用来装的子弹夹
*
* @param o
* 子弹
*/
public void push(Object o) {
lk.addFirst(o);
}
/**
* 打出第一发的子弹(也就是删除最后一个插入进来的)
*/
public void pup() {
lk.removeFirst();
}
}