一.UML的介绍
1.泛化关系(Generalization):一种继承关系,带三角箭头的实线,箭头指向父类。
2.实现关系(Realization):类与接口的关系,带三角箭头的虚线,箭头指向接口。
3.关联关系(Association):拥有关系,使一个类知道另一个类的属性和方法,是双向的。例如:成员变量。
带普通箭头的实现,指向被拥有者。
4.聚合(Aggregation),组合(Composition):整体与部分的关系,组合关系比聚合关系要密切,
聚合就像汽车与轮胎,整体与部分,带空心的菱形实线,菱形指向整体。组合就像公司与部门,没有公司就没有部门,带实心菱形的实线,菱形指向整体。
5.依赖关系(Dependency):是一种使用关系,带箭头的虚线,指向被使用者。体现:局部变量,方法的参数,静态方法的调用。
6.关系强弱的顺序
泛化=实现>组合>聚合>依赖>关联
二.list集合
特点:元素有序,且可重复
遍历:下标,foreach,迭代器
初始容量10,负载因子0.5,扩容增量0.5倍
新容量 = 原容量 + 原容量 * 0.5 , 如 ArrayList的容量为10,一次扩容后是容量为15
List<Integer> list=new ArrayList();
@Before
public void list1() {
list.add(1);
list.add(2);
list.add(3);
list.add(3);
list.add(4);
}
list的注意点
1、循环
@Test
public void remove01() {
for (int i = 0; i < list.size(); i++) {
if(list.get(i)==3) {
list.remove(i);
}
}
System.out.println(list);
}
注:list集合是动态的,当删除第一个3时,接下来的一个3将前进一位,判断指针将移到下一位也就是4的位置,这样程序就会出现错误
解决方法:
@Test
public void remove02() {
for(int i=0;i<list.size();i++){
if(list.get(i)==3) list.remove(i--);
}
System.out.println(list);
}
注:当执行完时,从4往上开始i--将判断指针往回跳一位,就可以解决错误
@Test
public void remove03() {
for(int i=list.size()-1;i>=0;i--){
if(list.get(i)==3){
list.remove(i);
}
}
System.out.println(list);
}
2、foreach遍历
@Test
public void remove04() {
for(Integer i:list){
if(i==3) list.remove(i);
}
}
注:foreach遍历删除时,内部有迭代器,其中checkForComodification方法中,要保证modCount的值与expectedModCount相等
注:当要删除的元素刚刚好是倒数第二位时,可以发现foreach遍历刚刚好能完成删除 ,前提要是刚刚好为倒数第二位
3、迭代器
@Test
public void remove05() {
Iterator<Integer> it=list.iterator();//迭代器
while(it.hasNext()){
if(it.next()==3){
it.remove();
}
}
System.out.println(list);
}
这个方法跟迭代器相似,却不是,跟foreach一样会报错,原因也是一样的
@Test
public void remove06() {
Iterator<Integer> it=list.iterator();
while(it.hasNext()){
Integer value=it.next();
if(value==3){
list.remove(value);
}
}
System.out.println(list);
}
4、删除
删除2这个元素
@Test
public void remove07() {
list.remove(Integer.valueOf(2));
System.out.println(list);
}
删除2号坐标
@Test
public void remove07() {
list.remove(2);
System.out.println(list);
}
CopyOnWriteArrayList
写时复制
线程安全
适合于读多,写少的场景
写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array
比Vector性能高
最终一致性
实现了List接口,使用方式与ArrayList类似