集合知识点的回顾

集合

集合概念

Java集合是使程序能够存储和操纵元素不固定的一组数据。 所有Java集合类都位于java.uti包中。与Java数组不同,Java集合中不能存放基本数据类型,只能存放对象的引用。但是在JDK5.0以后的版本当中,JAVA增加了“自动装箱”和“自动拆箱”的机制,比如如果要存入一个INT类型的数据,JVM会把数据包装成Integer然后再存入集合,
看起来集合能够存入基本数据类型,其实是不能的只是多了一个包装数据的过程。
而且存入集合的数据都会被转换成OBject类型。

集合的特点:

  • 1.集合能够对数据进行增加删除修改查询的操作

  • 2.集合能够存储引用类型,如果是基本类型可以是包装类类型,更加扩展了int的一些功能

  • 3.集合的长度是可变的

  • 4.部分集合是有序的,部分集合是无序的 (这里的有序指的是存储有序,并不是排序)

  • 5.部分集合是唯一的,部分集合是可重复

  • 6.部分集合是可排序的,部分集合是不可排序的

  • 7.部分集合是线程安全的,部分集合是线程不安全 (synchronized)

数组和集合的区别
1.长度

数组的长度固定不变的
集合长度是可以根据实际需要改变

2.内容

数组存储的是同一种类型的元素
集合可以存储不同类型的元素

3.数据类型

数组可以存储基本数据类型,也可以存储引用数据类型
集合只能存储引用类型
注意:虽然集合不能存储基本数据类型,但是可以存储基本数据类型的包装类类型

集合应该有以下功能:
1.增加功能

  • boolean add(E e) 向集合加入一个对象的引用
  • boolean addAll(Collection c)
public class CollectionDemo {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		System.out.println(c);
		// boolean add(Object obj) 
		c.add("张三");
		c.add("李四");
		c.add("王五");
		System.out.println(c);
		
		// boolean addAll(Collection c) 
		Collection c1 = new ArrayList();
		c1.add("曹操");
		c1.add("刘备");
		c1.add("孙权");
		c.addAll(c1);
		System.out.println(c);
		System.out.println(c1);

2.删除功能

  • void clear() 删除集合中所有对象,即不在持有对象的引用
  • boolean remove(Object o) 从集合中删除一个对象的引用
  • boolean removeAll(Collection c)
    链接上面的代码片段如下:
		// void clear() 
		System.out.println("--------------");
		//c.clear();
		System.out.println(c);
		// boolean remove(Object o) 
		System.out.println("remove:" + c.remove("张三"));
		System.out.println(c);
		
		// boolean removeAll(Collection c) 
	    //System.out.println("remove:" + c.removeAll(c1));
		System.out.println(c);

3.修改功能
4.查询功能

  • Iterator iterator() 返回一个Iterator对象,可以用它来遍历集合中的元素
  • Object[] toArray() 返回一个数组,该数组包含集合中的所有元素
  • T[] toArray(T[] a)
public class CollectionDemo {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add("李逵");
		c.add("武松");
		c.add("武大郎");
		System.out.println(c);
		
		Object[] arrs = c.toArray();
		for (int i = 0; i < arrs.length; i++) {
			System.out.println(arrs[i]);
		}
		
		System.out.println(arrs[1]);
		
		System.out.println("-------------------------");
		for(Iterator it = c.iterator();it.hasNext();) {
			Object oj = it.next();
			System.out.println(oj);
		}
		
		System.out.println("-------------------");
		// foreach就是用来遍历集合或者数组的
		for (Object obj : arrs) {
			System.out.println(obj);
		}
		
		int[] arr = new int[5];
		arr[0] = 25;
		arr[1] = 235;
		for (int i : arr) {
			System.out.println(i);
		}
		
		
	}
}



5.获取功能

  • int size() 返回集合中元素的个数

链接上面的代码片段如下:

//int size() 
System.out.println(c.size());

6.判断功能

  • boolean contains(Object o) 判断在集合中是否持有对象的引用
  • boolean containsAll(Collection c)
  • boolean isEmpty() 判断集合是否为空
    链接上面的代码片段如下:
		//boolean contains(Object o) 
		System.out.println("contains: " + c.contains(""));
		// boolean containsAll(Collection c) 
		Collection c2 = new ArrayList();
		c2.add("吕布");
		System.out.println("boolean containsAll(Collection c) :" + c.containsAll(c2));
		//boolean isEmpty() 
		System.out.println("boolean isEmpty() :" +c.isEmpty());

7.其他功能

  • boolean retainAll(Collection c)
  • 返回原集合是否发生改变
  • 改变了返回true
  • 没改变返回false

链接上面的代码片段如下:

Collection c3 = new ArrayList<>();
		c3.add("张三");
		c3.add("李四");
		c3.add("王五");
		c3.add("曹操");
		c3.add("关羽");
		c3.add("赵云");
		c3.add("吕布");
		System.out.println(c3);
		System.out.println("boolean retainAll(Collection c) " + c.retainAll(c3));
		System.out.println(c);
		// 求交集,返回的结果是观察原集合是否发生改变 改变了返回true,没改变返回false


异常名:
并发修改异常
产生原因:
在使用迭代器遍历集合元素的同时对集合元素进行了操作时抛出此异常
解决办法:
使用普通for循环遍历
使用List特有的迭代器遍历

注意:foreach遍历集合底层也是使用了迭代器不能够解决并发修改异常

public class CollectionDemo {
	public static void main(String[] args) {
		Collection c = new ArrayList();
		c.add("诸葛亮");
		c.add("赵子龙");
		c.add("刘备");
		
		/*Iterator it = c.iterator();
		
		while (it.hasNext()) {
			Object obj = it.next();
			String s = (String)obj;
			
			if (s.contains("关羽")) {
				c.add("诸葛亮");
			}
		}*/
		
//		for (Object object : c) {
//			String s = (String)object;
//			
//			if (s.contains("刘备")) {
//				c.add("张飞");
//			}
//		}
		
		Object[] array = c.toArray();
		for (int i = 0; i < array.length; i++) {
			String s = (String)array[i];
//			
			if (s.contains("刘备")) {
				c.add("张飞");
			}
		}
		
		System.out.println(Arrays.toString(array));
		System.out.println(c);
	}
}

你可能感兴趣的:(集合,foreach,并发修改异常,java,原创)