目录
集合类图
在UML类图中,常见的几种关系:
泛化:是一种继承关系,表示一般与特殊关系,指定了子类如何特化父类的所有特征行为。例如:老虎是动物的一种,即老虎的特性也有动物的共性
实现:类与接口的关系,表示接口所有特征和行为的实现。
关联:是一种拥有的关系,它使一个类知道另一个类的属性和方法,关联分为双向和单向。例如:老师与学生是双向关联,老师有多名学生,学生也可能有多名老师。但学生与某课程间的关系为单向关联,一名学生可能要上多门课程,课程是个抽象的东西他不拥有学生。
聚合:整体与部分的关系,且部分可以离开整体单独存在。例如:车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在
组合:是整体与部分的关系.,没有公司就不存在部门。组合关系是关联关系的一种,是比聚合关系还要强的关系,它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期
依赖:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖。
关系的强弱顺序:泛化= 实现> 组合> 聚合> 关联> 依赖
List集合
list集合特点:元素有序,且可重复
遍历方法:下标,foreach,迭代器
list集合实现方法:ArrayList、LinkedList、Vector、CopyOnWriteArrayList
使用junit测试,代码更简单
基本的遍历循环方法
@Test
public void listAdd() {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(3);
list.add(5);
list.add(4);
System.out.println(list);
}
private List<Integer> list = new ArrayList<>();
@Before
public void setup() {
list.add(1);
list.add(3);
list.add(5);
list.add(4);
}
// 第一种遍历方法
@Test
public void list1() {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
//第二种遍历方法
@Test
public void list2() {
for (Integer integer : list) {
System.out.println(integer);
}
}
//迭代器
@Test
public void list3() {
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
ArrayList是最常用的集合
特点:1、简单数据结构,超出容量自动扩容,动态数组
2、内部实现是基于基础的对象数组的
3、随机访问快
缺点:1、不适合随机增加或删除
2、线程不安全
ListedList
特点:1、LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部
2、LinkedList可被用作堆栈(stack)【包括了push,pop方法】,队列(queue)或双向队列(deque)
3、以双向链表实现,链表无容量限制,允许元素为null,线程不安全
4、适合做随机的增加或删除Vector
Vector内部实现类似于ArrayList。它支持线程同步,某时刻只能有一个线程能够写Vector。但花费很高,所以访问Vector比访问ArrayList慢。(线程安全,并行性能慢)
CopyOnWriteArrayList
特点:1、写时复制
2、线程安全
3、 适合于读多,写少的场景
4、写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array
5、比Vector性能高
6、最终一致性
7、实现了List接口,使用方式与ArrayList类似
ArrayList删除方法
package com.zking.list;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.junit.Before;
import