集合框架.list集合

一.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类似

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值