面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。
1.数组在内存存储方面的特点:
-数组初始化以后,长度就确定了。
-数组声明的类型,就决定了进行元素初始化时的类型
2.数组在存储数据方面的弊端:
-数组初始化以后,长度就不可变了,不便于扩展
-数组中提供的属性和方法少,不便于进行添加、删除、插入等操作, 且效率不高。
-同时无法直接获取存储元素的个数
-数组存储的数据是有序的、可以重复的,存储数据的特点单一
-Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组。
-Java集合分为 Collection 和 Map 两种体系
1. Collection 接口:单列数据, 用来存储一个一个对象
-List接口: 元素有序、可重复的集合 (“动态”数组)
-ArrayList、LinkedList、Vector
-Set接口: 元素无序、不可重复的集合 ( 高中讲的“集合”)
-HashSet、LinkedHashSet、TreeSet
2. Map接口: 双列数据,保存具有映射关系“key-value对”的集合 (高中的“函数”)
-HashMap、LinkedHashMap、TreeMap、Hashtable、Properties
注:在Collection接口的实现类的对象中添加数据obj(自定义)时,要求obj所在类要重写equals(),这样才能正确使用contains、remove等方法,因为它们要用到equals(),如果不重写比较的是内存地址。
1、add(Object e) 元素e添加到集合中
2、size()获取元素个数
3、addAll(Collection coll) 将coll集合中的元素添加到当前集合
4、isEmpty()判断集合是否为空
5、clear( )清空集合
6、contains(Object o)当前集合是否包含 o,判断时会调用 o 对象所在类的equals()
7、containsAll(Collection coll)判断coll中所有元素是否在当前集合中
8、remove()移除某个元素
9、removeAll(Collection coll)差集:从当前集合中移除coll中所有的元素
10、retainAll(Collection coll)交集:获取当前集合与coll的交集,并返回给当前的集合
11、equals(Object obj)判断obj集合是否与当前集合相同(元素是有序的)
12、hashCode()返回当前对象的哈希值
13. toArray()集合 -> 数组
14、Arrays.asList( ) (静态方法asList)数组 -> 集合
15、iterator():返回迭代器对象,用于集合遍历
-Iterator对象称为迭代器,主要用于遍历 Collection 集合中的元素
-Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象。
- Iterator 仅用于遍历集合, Iterator 本身并不提供承装对象的能力。如果需要创建Iterator 对象,则必须有一个被迭代的集合。
- 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认指针都在集合的第一个元素之前。
- -hasNext()
- //判断集合是否有下一个元素
- -next()
- //返回下一个元素
-
- Iterator iterator=list.iterator();
- while(iterator.hasNext()){
- System.out.println(iterator.next());
- }
可以利用Iterator对象删除集合元素 -remove( )
注意:
Iterator可以删除集合的元素, 但是是遍历过程中通过迭代器对象的remove方法不同于集合对象的remove方法。
- 遍历操作不需获取Collection或数组的长度,无需使用索引访问元素。
-遍历集合的底层调用Iterator完成操作。
- for(Integer e:list){
- System.out.println(e);
- }