集合
- 1. 集合框架概述
- 2. Collection接口
-
- 2.1 collection接口体系:
- 2.2、常用方法:(API)
- 3.Iterator 迭代器接口
-
- 3.1迭代器执行原理
- 3.2使用foreach循环遍历集合元素
- 4.List 接口
-
- 4.1 List概述
- 4.2 源码分析
- 4.3常用方法
- 5.Set 接口
- 6.Map接口
- 7.Connections工具类
1. 集合框架概述
- java中为了对多个对象进行操作,就需要对多个对象进行存储,针对Array的弊端,Java集合就创建一个“容器”,可以动态的把多个对象的引用放入容器中。
- java集合类就是对多个对象进行存储的操作类,存储的类型可以是单个对象,也可以是关联对象。
- 注意Java集合中存储的对象在内存中,如果存储在硬盘中的叫做“持久化操作”。
Java集合分为两种不同的体系:
- Collection:单值接口操作
List:接口:元素有序,可重复 —“动态”数组
ArrayList、LinkedList、Vector
Set:接口:元素无序,不可重复 — “高中集合”
HashSet、LinkedHashSet、TreeSet
- Map:键值操作接口、有key—value组成 — “高中函数y = f(x)”
HashMap、LinkedHashMap、TreeMap、Hashtable、Properties
2. Collection接口
- Collection接口不提供任何实现类,而是提供更加具体的子接口;
-
在JDK5之前,集合会丢失容器中所放入的对象的类型,会把所有放入的对象都当成Object类型处
理,从1.5之后增加了泛型,则Java集合可以记住容器中的对象的数据类型。
2.1 collection接口体系:
Java--------集合1. 集合框架概述2. Collection接口3.Iterator 迭代器接口4.List 接口5.Set 接口6.Map接口7.Connections工具类 2.2、常用方法:(API)
Collection接口是Set,Queue,List的父接口。Collection接口中定义了多种方法可供其子类进行实现,以实现数据操作。由于方法比较多,就偷个懒,直接把JDK文档上的内容搬过来。代码示例:Java--------集合1. 集合框架概述2. Collection接口3.Iterator 迭代器接口4.List 接口5.Set 接口6.Map接口7.Connections工具类
//通过ArrayList创建对象
Collection coll = new ArrayList();
//add(E e) //Object e:添加元素
coll.add("AA");
coll.add("BB");
coll.add(123); //自动装箱
coll.add(new Date());
//size() :获取集合中元素的个数
System.out.println(coll);
System.out.println("集合中元素个数: " + coll.size()); //4
//将coll2中的所有元素添加到指定集合中
//addAll(Collection<? extends E> c)
Collection coll2 = new ArrayList();
coll2.add(456);
coll2.add("cc");
coll.addAll(coll2);
System.out.println(coll);
System.out.println("集合中元素个数: " + coll.size()); //6
// clear() : 清空集合中的元素
coll.clear();
System.out.println(coll);
System.out.println("集合中元素个数: " + coll.size()); //0
//isEmpty():判断当前集合是否为空
System.out.println(coll.isEmpty());
实例代码:(contains(Object o)、containsAll(Collection<?> c))
Collection coll = new ArrayList();
coll.add(123);
coll.add(456);
coll.add(new String("Tom"));
coll.add(false);
Person p = new Person("小王", 20);
coll.add(p);
// 1、contains(Object o) : 判断当前集合中是否包含指定的元素,判断对象相等会调用对象所在类的
equals()方法
// boolean contains = coll.contains(123);
// System.out.println(contains);
// boolean contains2 = coll.contains(new String("Tom"));
// 添加p對
// System.out.println(contains2); // true
// boolean contains3 = coll.contains(p);
// System.out.println(contains3); // true
boolean contains4 = coll.contains(new Person("小王", 20));
System.out.println(contains4); // false: 调用的是父类(object的equals方法使用是==比
较)
// true : 重写父类的equals方法:属性相同就相同
//2、containsAll(Collection<?> c) :判断coll2集合中的所有元素是否在某个集合中存在
Collection coll2 = Arrays.asList(123,456);
System.out.println(coll.containsAll(coll2));
- 在Collection接口中的添加object类型的对象时,要求所在的类重写equals方法
- 集合在判断相同元素时会调用所在类的equals方法判断是否相同
3.Iterator 迭代器接口
- Iterator接口经常被称作迭代器,它是Collection接口的父接口。但Iterator主要用于遍历集合中的元素。
- Iterator接口中主要定义了2个方法: hasNext()方法 和 next()方法。
-
Iterator仅用于遍历集合,本身不提供承装对象的能力,如果需要创建Iterator对象,则必须有需
要迭代的集合
-
集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元
素之前
3.1迭代器执行原理
3.2使用foreach循环遍历集合元素
- jdk1.5之后提供了foreach循环迭代访问Collection和数组
- foreach底层使用的迭代器方式
4.List 接口
4.1 List概述
-
List集合有序、可重复。可看成“动态”数组,代替原来的数组
核心实现类(重点):
ArrayList:作为List接口的主要实现类、线程不安全、效率高。底层使用Object[]数组实现存储
LinkedList:底层使用双向列表存储数据,如果频繁添加、删除、插入元素则效率较高
vector:古老的实现类、甚至出现在List接口之前,线程安全,效率低。底层使用Object[]数组实现存储
4.2 源码分析
ArrayList:
LInkList:
- LinkedList创建对象时,内部声明了Node类型的firsts属性和last属性,默认为null
-
add()添加,将内容添加到新建的node节点中
Vector:
4.3常用方法
增删改查
5.Set 接口
-set:存储无序的,不可重复的