从屌丝到架构师的飞越(集合篇)-集合

一.介绍

集合(简称集)是数学中一个基本概念,它是集合论的研究对象,集合论的基本理论直到19世纪才被创立。最简单的说法,即是在最原始的集合论——朴素集合论中的定义,集合就是“确定的一堆东西”。集合里的“东西”,叫作元素。

由一个或多个确定的元素所构成的整体叫做集合。若x是集合A的元素。集合中的 元素有三个特征:

1、确定性(集合中的元素必须是确定的)。

2、互异性(集合中的元素互不相同)。

3、无序性(集合中的元素没有先后之分)。

集合类存放于java.util包中,集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用。

集合类型主要有3种:set(集)、list(列表)和map(映射)。

二.知识点介绍

1、java中的集合

2、集合分类

3、Collection

三.上课对应视频的说明文档

1、java中的集合

在java实际的项目开发中,一定会出现保存多个对象的操作,根据之前学习的知识来讲,此时一定会使用对数组的概念。但传统的对象数组有一定问题:长度是固定的(因为此缺陷,所以数组一般不会使用)。为了可以动态地实现多个对象的保存,可以利用链表来实现一个动态的对象数组 ,但是对于链表的数据结构编写会存在以下3个问题:

(1)由于需要处理大量的引用关系,如果要开发链表工具类,对初学者而言难度较高;

(2)为了保证链表在实际的开发中可用,在编写链表实现时必须更多地考虑到性能问题

(3)链表为了可以保存做任意对象类型,统一使用了Object类型进行保存。那么所有要保存的对象必须发生向上转型,而在进行对象信息取出时又必须强制性地向下转型操作。如果一个链表中所保存的数据不是某种类型,这样的操作会带来安全隐患。

综合以上问题,可以得出一个结论:如果在开发项目里面由用户自己去实现一个链表,那么这种项目的开发难度对于大部份开发者而言实在是太高了。同时在所有的项目里面都会存在数据结构的应用。在java设计之初就考虑到了此类问题,所以提供了一个与链表类似的工具类-Vector(向量类)。但是随着时间的推移,这个类并不能很好的描述出所需要的数据结构,所以Java2(jdk1.2)之后提供了一个专门上实现数据结构的开发框架-类集框架[集合]。在jdk1.5之后,泛型技术的引入,又解决了类集框架中,所有操作类型都使用Object所带来的安全隐患。

2、集合分类

java集合的所有程序都是保存在java.util这个包中,在整个的类集框架中,其核心的接口为:List,Set,Map,Iterator,Enumeration。

从屌丝到架构师的飞越(集合篇)-集合_第1张图片

3、Collection

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。

3.1、Collection常用方法

(1)int size() 获取元素个数

(2)boolean isEmpty() 是否个数为 0

(3)boolean contains(Object element) 是否包含指定元素

(4)boolean add(E element)添加元素,成功时返回 true

(5)boolean remove(Object element) 删除元素,成功时返回 true

(6)void clear() 删除所有元素

代码示例:

public class CollectionDemo {

public static void main(String[] args) {

// 测试不带All的方法

// 创建集合对象

// Collection c = new Collection(); //错误,因为接口不能实例化

Collection c = new ArrayList();

// boolean add(Object obj):添加一个元素

// System.out.println("add:"+c.add("hello"));

c.add("hello");

c.add("world");

c.add("java");

// void clear():移除所有元素

// c.clear();

// boolean remove(Object o):移除一个元素

// System.out.println("remove:" + c.remove("hello"));

// System.out.println("remove:" + c.remove("javaee"));

// boolean contains(Object o):判断集合中是否包含指定的元素

// System.out.println("contains:"+c.contains("hello"));

// System.out.println("contains:"+c.contains("android"));

// boolean isEmpty():判断集合是否为空

// System.out.println("isEmpty:"+c.isEmpty());

//int size():元素的个数

System.out.println("size:"+c.size());

System.out.println("c:" + c);

}

}

3.2、Collection操作整个集合的方法

(1)boolean containsAll(Collection c) 是否包含指定集合 c 的全部元素

(2)boolean addAll(Collection c) 添加集合 c 中所有的元素到本集合中,如果集合有改变就返回 true

(3)boolean removeAll(Collection c) 删除本集合中和 c 集合中一致的元素,如果集合有改变就返回 true

(4)boolean retainAll(Collection c) 保留本集合中 c 集合中两者共有的,如果集合有改变就返回 true

代码示例:

public class CollectionDemo2 {

public static void main(String[] args) {

// 创建集合1

Collection c1 = new ArrayList();

c1.add("abc1");

c1.add("abc2");

c1.add("abc3");

c1.add("abc4");

// 创建集合2

Collection c2 = new ArrayList();

c2.add("abc1");

c2.add("abc2");

c2.add("abc3");

c2.add("abc4");

c2.add("abc5");

c2.add("abc6");

c2.add("abc7");

// boolean addAll(Collection c):添加一个集合的元素

// System.out.println("addAll:" + c1.addAll(c2));

//boolean removeAll(Collection c):移除一个集合的元素(是一个还是所有)

//只要有一个元素被移除了,就返回true。

//System.out.println("removeAll:"+c1.removeAll(c2));

//boolean containsAll(Collection c):判断集合中是否包含指定的集合元素(是一个还是所有)

//只有包含所有的元素,才叫包含

// System.out.println("containsAll:"+c1.containsAll(c2));

//boolean retainAll(Collection c):两个集合都有的元素?思考元素去哪了,返回的boolean又是什么意思呢?

//假设有两个集合A,B。

//A对B做交集,最终的结果保存在A中,B不变。

//返回值表示的是A是否发生过改变。

System.out.println("retainAll:"+c1.retainAll(c2));

System.out.println("c1:" + c1);

System.out.println("c2:" + c2);

}

}

3.3、Collection对数组操作的方法

Object[] toArray() 返回一个包含集合中所有元素的数组

T[] toArray(T[] a) 返回一个包含集合中所有元素的数组,运行时根据集合元素的类型指定数组的类型

代码示例:

public class CollectionDemo3 {

public static void main(String[] args) {

// 创建集合对象

Collection c = new ArrayList();

// 添加元素

c.add("hello"); // Object obj = "hello"; 向上转型

c.add("world");

c.add("java");

// 遍历

// Object[] toArray():把集合转成数组,可以实现集合的遍历

Object[] objs = c.toArray();

for (int x = 0; x < objs.length; x++) {

// System.out.println(objs[x]);

// 我知道元素是字符串,我在获取到元素的的同时,还想知道元素的长度。

// System.out.println(objs[x] + "---" + objs[x].length());

// 上面的实现不了,原因是Object中没有length()方法

// 我们要想使用字符串的方法,就必须把元素还原成字符串

// 向下转型

String s = (String) objs[x];

System.out.println(s + "---" + s.length());

}

}

}

3.4、遍历 Collection

遍历 Collection的方式:使用 Iterator 迭代器

Collection persons = new ArrayList();

Iterator iterator = persons.iterator();

while (iterator.hasNext) {

System.out.println(iterator.next); 

你可能感兴趣的:(从屌丝到架构师的飞越(集合篇)-集合)