一文掌握java集合框架的Collection接口


java集合框架图
最近复习了java的集合框架,现在来把java的集合框架下的接口和接口常用类,常用类的方法总结和整理一下,希望能帮到需要的人.
集合可以看作是一种容器,用来存储对象信息。所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。

集合和数组的区别

	(1)数组长度不可变化而且无法保存具有映射关系的数据;
	集合类用于保存数量不确定的数据,以及保存具有映射关系的数据。
	(2)数组元素既可以是基本类型的值,也可以是对象;集合只能保存对象。

为什么要用到集合

数组的特点:

	(1)长度固定,如果要扩容需要程序员自己维护,插入和删除效率很低
	(2)数组只支持"有序,可重复"的特点,但是实际开发中,可能需要无序,不可重复的需求	

集合的特点:

	(1)长度不固定,是可扩容的(可变的)
	(2)支持多种数据的存储结构:有序的,无序的,可重复的,不可重复的,一对一的,一对多的
	(3)JDK在数组和链式的基础上设计了很多有用的容器

集合:

集合的分类

(1)Collection:一组对象(“单身趴”)----都没有和他对应的,只有自己.(Collection在哭泣)
(2)Map:键值对(key,value)(“情侣约会”,“家庭聚会”)----- 成对出现.

容器都有的特征:可以进行增删改查

Collection

接口:java.util.Collection

Collection概述

  • Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。
  • 一些 collection 允许有重复的元素,而另一些则不允许。
  • 一些 collection 是有序的,而另一些则是无序的。
  • JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。
  • 此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

Collection方法

1.添加方法

  •  (1)add(Object obj)  一次添加一个元素
    

注意add方法的参数的类型是Object的,所以如果用add方法添加other,那么other会被当成一个集合元素(当成一个元素)

  •  (2)addAll(Collection other)    一次添加多个元素,把other中的元素都添加到当前集合中来.
    

注:范围:this =this∪()并other

	@Test
	public void test1() {
		//多态引入,为的是生成一个Collection的对象c,而对象c就只能使用collection的方法而不受到ArrayList的干扰
		Collection c = new ArrayList();
		c.add("张三");
		c.add("李四");
		c.add("王五");
		
		Collection other = new ArrayList();
		other.add("赵柳");
		other.add("赵四");
		
	//	测试add()方法的参数是Object类型的
	//  int[] array1 = {1,2,3};
	//	other.add(array1);
		System.out.println(other);
		
		//这里要对比c.add()方法和c.addAll()方法的不同
	//	c.addAll(other);
	//	c.add(other);
		System.out.println(c.size());
		Object[] array= c.toArray();
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
		
	}

2.删除remove

  •  (1)remove(Object obj)  一次删除一个
    
  •  (2)remove(Collection other)  一次删除多个
    

注:范围 this = this-(this ∩(交) other)

  •  (3)clear()   清空,消除所有
    
	@Test 
	public void test2() {
		//多态引入,为的是生成一个Collection的对象c,而对象c就只能使用collection的方法而不受到ArrayList的干扰
		Collection c = new ArrayList();
		c.add("张三");
		c.add("李四");
		c.add("王五");
		c.add("钱七");
		
		Collection other = new ArrayList();
		other.add("赵柳");
		other.add("李四");
		other.add("王五");
		
		//测试remove()方法
		
		c.remove("张三");		
		Object[] array= c.toArray();
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
		
		System.out.println("..............");
		c.removeAll(other);
		Object[] array1= c.toArray();
		for (int i = 0; i < array1.length; i++) {
			System.out.println(array1[i]);
		}
	}

3.修改

  •  Collection根接口中没有提供修改的方法
    

4.查询:

  •  (1)contains(Object obj) : 判断obj是否在当前集合中  返回布尔值
    
  •  (2)contains(Collection<?>  c)判断c中的元素是否都在集合中,即判断c是否是this的子集
    
  •  (3)isEmpty()   判断是否为空的集合
    

5.获取有效元素的个数:

  •  int size()
    
  • Collection 中,没有提供一个获取具体元素的方法
    

6.其他方法:

  • retainAll(Collection<?> c) 保留this和c的交集
    注:范围 this =this ∩(交) other

7.遍历

(1)老方法

  • Object[] toArray():如果该集合的底层实现就是数组,那么比较简单,但是如果该
  •  				集合的底层不是数组,那么就比较麻烦.无论底层怎么样,
    
  •  				都会返回一个size长度的数组,所以比较浪费空间
    
	@Test
	public void test3() {
		//多态引入,为的是生成一个Collection的对象c,而对象c就只能使用collection的方法而不受到ArrayList的干扰
		Collection c = new ArrayList();
		c.add("张三");
		c.add("李四");
		c.add("王五");
		c.add("钱七");
		
		Collection other = new ArrayList();
		other.add("赵柳");
		other.add("李四");
		other.add("王五");
		
		c.retainAll(other);
		Object[] array= c.toArray();
		for (int i = 0; i < array.length; i++) {
			System.out.println(array[i]);
		}
	}

(2)foreach
foreach语法:
foreach:称为增强版的for循环

 语法结构:
	for(元素类型 元素名:可迭代的容器){
	}
  • foreach 只能用来访问集合或者数组中的元素,但是不能对其进行修改

  • 可以把元素名理解为形参,没循环一次就把数组或者集合的元素依次赋值给形参,所以他不能修改

  • 即如果元素是基本数据类型,那么把数组或集合的元素的数据值赋值给它那么对它怎么修改和实参无关

  • 如果元素是引用数据类型,那么把数组或者集合的元素的"地址值"赋值给它,那么对它的属性修改和它有关,对它的地址修改和实参无关.

     	 * 
    

结论:

  • 如果你只是查看数组或集合的元素,用foreach比较方便.但是如果要修改,那么用foreach不是很方便.
	@Test
	public void test3() {

		Collection c = new ArrayList();
		c.add("张三");
		c.add("李四");
		c.add("王五");
		for (Object object : c) {
			System.out.println(object);
		}
		
	}

(3)Iterator

  • 步骤:
1.先通过Collection系列集合.对象拿到迭代器对象
2.在通过Iterator的方法进行迭代
	@Test
	public void test1() {
		Collection c = new ArrayList();
		c.add("张三");
		c.add("李四");
		c.add("王五");
		c.add("钱七");
	
		//1.先通过Collection系列集合.对象拿到迭代器对象
		Iterator it = c.iterator();
		
		//2.在通过Iterator的方法进行迭代
		while(it.hasNext()) {//判断集合中是否有元素需要迭代
			Object next = it.next();
			System.out.println(next);
		}
		
		
	}
发布了82 篇原创文章 · 获赞 26 · 访问量 3987

猜你喜欢

转载自blog.csdn.net/qq_40742223/article/details/105025998