java集合(list集合)

list集合特点:

  1. list集合中元素是有序的。

  2. list集合中元素是可重复的。

list集合的遍历:

foreach,迭代器

List<Integer> list=new ArrayList<Integer>();
 
	@Before
	public void setup() {
		  list.add(1);
		  list.add(2);
		  list.add(3);
		  list.add(3);
		  list.add(4);
	}
		 
	/**
	 * foreach遍历
	 */
	@Test
	public void list01() {
		for(Integer e:list){
			  System.out.println(e);
			}
	}
	/**
	 * for循环
	 */
	@Test
	public void list02() {
		for(int i=0;i<list.size();i++){
		  System.out.println(list.get(i));
		}
	}
	/**
	 * 迭代器
	 */
	@Test
	public void list03() {
		Iterator<Integer> it = list.iterator();
		while(it.hasNext()) {
			System.out.println(it.next());
		}
	}

 扩容:

  1. 初始容量10,负载因子0.5,扩容增量0.5倍
  2. 新容量 = 原容量 + 原容量 * 0.5
public void listKR()throws Exception {
		List<Integer> list=new ArrayList<Integer>();
		for(int i=0;i<=100;i++) {
			list.add(i);
			System.out.println("i :"+i);
			System.out.println("length :"+getListElsSize(list));
		}
	}
	
	private int getListElsSize(List obj)throws Exception {
		Class<? extends List> clazz = obj.getClass();
		Field f = clazz.getDeclaredField("elementData");
		f.setAccessible(true);
		Object[] object =(Object[]) f.get(obj);
		return object.length;
	}

LinkedList 

  1. LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部
  2. 线程不安全
  3. LinkedList可被用作堆栈(stack)【包括了push,pop方法】,队列(queue)或双向队列(deque)
  4. 以双向链表实现,链表无容量限制,允许元素为null,线程不安全
  5. 适合做随机的增加或删除

 Vector

  1. 线程安全
  2. 并行性能慢,不建议使用

 CopyOnWriteArrayList

  1. 写时复制
  2. 线程安全
  3. 适合于读多,写少的场景
  4. 写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array
  5. 比Vector性能高
  6. 最终一致性
  7. 实现了List接口,使用方式与ArrayList类似

ArrayList

  1. 简单数据结构,超出容量自动扩容,动态数组
  2. 内部实现是基于基础的对象数组的
  3. 随机访问快
  4. 不适合随机增加或删除
  5. 线程不安全

 删除时的注意点

 测试数据准备,为更好的显示问题,在构建的List集合中有紧挨在一起的两个或两个以上的元素

list = new ArrayList<>();
		list.add(1);
		list.add(2);
		list.add(3);
		list.add(3);
		list.add(4);

 1. 下标循环删除方式1

for(int i = 0; i<list.size(); i++) {
			if(list.get(i) == 3) list.remove(i);
}

 2. 下标循环删除方式2

for(int i = 0; i < list.size(); i++) {
			if(list.get(i) == 3) list.remove(i--);
}

 3. 下标循环倒序删除

for(int i = list.size() - 1; i >= 0; i--) {
			if(list.get(i) == 3) list.remove(i);
}

 4. foreach循环删除

for(Integer e: list) {
			if(e == 3) {
				list.remove(e);
}
}

删除的参数是基本型的整数

list.remove(i)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 2集合框架图  集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。  抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。  实现类:8个实现类(实线表示),对接口的具体实现。  在很大程度上,一旦您理解了接口,您就理解了框架。虽然您总要创建接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上;因此,允许您更改基本的数据结构而不必改变其它代码。  · Collection 接口是一组允许重复的对象。  · Set 接口继承 Collection,但不允许重复,使用自己内部的一个排列机制。  · List 接口继承 Collection,允许重复,以元素安插的次序来放置元素,不会重新排列。  · Map接口是一组成对的键-值对象,即所持有的是key-value pairs。Map中不能有重复的key。拥有自己的内部排列机制。  · 容器中的元素类型都为Object。从容器取得元素时,必须把它转换成原来的类型。  Java 2简化集合框架图  集合接口  1.Collection 接口  用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。  (1) 单元素添加、删除操作:   boolean add(Object o):将对象添加给集合   boolean remove(Object o): 如果集合中有与o相匹配的对象,则删除对象o  (2) 查询操作:   int size() :返回当前集合中元素的数量   boolean isEmpty() :判断集合中是否有任何元素   boolean contains(Object o) :查找集合中是否含有对象o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值