为什么需要集合
面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对多个对象进行存储,因为数组有一些弊端,所以引入了集合。
- 集合和数组都是对多个数据进行存储的结构,简称Java容器。
- 数组的特点,一旦初始化之后,其长度就固定了;声明数组的时候,需要指定数组的类型,其元素的类型也就确定了。比如:String [] arr; int [] arr; Object [] arr;
3. 数组的缺点(反过来就是集合的优点)
一旦初始化之后长度就不可修改了;
数组中提供了方法非常的有限,对于添加、删除、插入数据非常的不方便、同时效率也很低下;
获取数组中实际元素的个数,数组没有现成的属性或者方法可用;
数组存储数据的特点是有序的,中间不能有空,数组存储数据的特点是有序、可重复。对于无序、不可重复的需求,不能满足。
Java集合可分为Collection和Map两种体系
- Collection接口:单列数据,定义了存储一组对象的方法的集合
- List 接口:元素有序、可重复。(常被称为“动态”数组,自动扩容)
ArrayList、LinkedList、Vector - Set 接口: 元素无序、不可重复 。(高中时候讲过的集合。无序性、确定性、互异性)
Set的集合常常用于数据的过滤。
HashSet、LinkedHashSet、TreeSet
- Map接口
双列数据,保存具有映射关系“key - value对”的集合。
(高中学过的 y = f(x)每一个x对应了一个y,不同的可能对应了同一个y,但是一个x不可能对应多个y,Map集合也是一个value可以对应不同的key,但是一个key不能对应多个value)
HashMap 、LinkedHashMap、TreeMap、HashTable、properties
根据功能不同选择不同的容器。
前情回顾
Collection接口中的方法的使用
Collection collection = new ArrayList();
add(); size(); addAll();clear(); isEntry();
throw 和 throws 的异同
- 相同点:没有 (都是异常处理部分使用的,这算吗?)
- 异:
- throw:生成一个异常对象,并且抛出。使用的位置在方法的内部,自动抛出异常对象。
- throws:处理异常的方式,使用在方法声明的末尾,对应的另外一种方式是try catch finally
“上游排污,下游治污”
谈谈你对同步代码块中同步监视器和共享数据的理解及其各自要求。
同步监视器:俗称锁。①任何一个类的对象都可以充当锁。② 多个线程共用同一把锁。
共享数据:多个线程共同操作的数据,即同步数据,需要使用的同步机制讲操作共享数据的代码包起来,不能包多了,也不能包少了。