4

java之集合精选

 2 years ago
source link: https://blog.51cto.com/JavaArchitect/5657376
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

java之集合精选

精选 原创

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

我们上一篇聊到了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之集合精选_java_02

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之集合精选_概念_03

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_04
java之集合精选_代码_05

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之集合精选_代码_06

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之集合精选_代码_07

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

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

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

java之集合精选_集合_08

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK