java之集合精选

前言:

有些人的生命没有风景,是因为他只在别人造好的、最方便的水管里流过来流过去。你不要理那些水管,你要真的流经一个又一个风景,你才会是一条河。

我们上一篇聊到了java之递归算法,这一篇我们聊一下集合,针对于以下的概念,都会有实体例子配合着,给大家演示,希望给历险中的你带来一些帮助!!!   

java之集合精选

一.介绍 

    ​集合​​(简称集)是​数学​​中一个基本概念,它是​集合论​​的研究对象,集合论的基本理论直到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。

java之集合精选

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() 是否个数为

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

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

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

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

代码演示:

package com.Test;

import java.util.ArrayList;
import java.util.Collection;

public class Test {
private final static String name = "磊哥的java历险记-@51博客";

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);
System.out.println("============="+name+"=============");
}
}

java之集合精选

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

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

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

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

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

代码演示:

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);
}
}

java之集合精选

java之集合精选

3.3、Collection对数组操作的方法

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

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

代码演示:

package com.Test;

import java.util.ArrayList;
import java.util.Collection;

public class Test {
private final static String name = "磊哥的java历险记-@51博客";

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());


}
System.out.println("=============" + name + "=============");
}
}

java之集合精选

3.4、遍历

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

代码演示:

package com.Test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Test {
private final static String name = "磊哥的java历险记-@51博客";

public static void main(String[] args) {
// 创建集合对象
Collection c = new ArrayList();
// 添加元素
c.add("hello"); // Object obj = "hello"; 向上转型
c.add("world");
c.add("java");
// 遍历
Collection<Object> objects = new ArrayList<Object>();
objects.add(c);
objects.add("java历险记");
objects.add("_51博客");
// 获取迭代器
Iterator iterator = objects.iterator();
// 输出集合中的所有元素
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
System.out.println("=============" + name + "=============");
}
}

java之集合精选

结语:

梦是一种欲望,想是一种行动。梦想是梦与想的结晶。

追随梦想,不论做什么事,相信你自己,别让别人的一句话将你击倒。

我会沿着java基础至中阶,高阶,和后面的实战项目,循序渐进,由浅入深,希望能够帮助看到我文章的兄弟们,特别是初学者!感谢大家持续关注! ! ! 

发表评论

相关文章