Java 集合

目录

集合

集合与数组的区别

集合框架 

集合接口

Java集合实现类的作用

Collection接口


        在编程时,可以使用数组来保存多个对象,但数组长度不可变化,一旦在初始化数组时制定了数组长度,这个数组长度就是不可变的。如果需要保存数量变化的数据,数组就有点无能为力了。而且数组无法保存具有映射关系的数据,key-value,数据看上去像两个数组,但这两个数组的元素之间有一定的关联关系。

        为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),Java提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。Java所有的集合类都位于java.util包下,提供了一个表示和操作对象集合的同意构架,包含大量集合接口,以及这些接口的实现类和操作方法。

        集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),而集合里只能保存对象(实际上只是保存对象的引用变量)。

        Java集合类型分为Collection 和 Map,它们是Java集合的根接口,这两个接口又包含了一些子接口或实现类。

集合

概念: 对象的容器,存储对象的对象,可代替数组

特点: 容器的工具类,定义了对多个对象进行操作的常用方法

位置: java.util.*;

集合与数组的区别

1.集合的容量可变,数组的容量不可变

2.数组只能存储单一类型的数据,集合可以存放各种类型的数据

3.数组可以存放基本数据类型,集合只能存放引用数据类型,要存放基本数据类型,就要引用基本数据类型的包装类

4.数组类型空间必须连续且支持下标访问,集合内存空间可以连续也可以不连续。

5.集合可以以一段连续的内存空间(数组)作为底层容器,也可以使用链表作为底层容器。以数组为底层容器的集合支持下标访问,链表不支持;使用链表作为底层容器时,增删不会移动大量元素,但数组会移动大量元素(尾部增删除外)

集合框架 

用于存储数据的容器

集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。

任何集合框架都包含三大块内容: 对外的接口、接口的实现和集合运算的算法。

接口: 表示集合的抽象数据类型。接口允许我们操作集合时不必关注集体实现——达到"多态" 例如: Collection、List、Set、Map

实现: 集合接口的具体实现。可重复使用的数据结构 例如: ArrayList、LinkedList、HashSet、HashMap

Collection和Collections的区别

Collections是一个工具类,具体可以实现Shuffle()打乱元素顺序,Reverse是将集合翻转,sort()是对元素进行升序排序

Collection是Set,List, Vector集合的父类接口

算法:是实现集合接口的对象里的方法执行的 一些有用的计算。例如: 查找、排序。

java集合框架提供了一套性能优良,使用方便的接口和类,java集合框架需要导包。

特点

对象封装数据,对象多了也需要存储。集合用于存储对象。

对象的个数确定可以使用数组,对象的个数不确定可以使用集合(集合可变长)。

集合接口

  1. Collection接口 是最基本的集合接口,存储单列数据的根接口,表示一组对象。一些Collection允许有重复元素,而另一些不允许。一些Collection是有序的,而另一些是无序的。JDK不提供此接口的任何直接实现,只提供更具体的子接口(List 和 Set)

  2. List接口 是一个有序的Collection 使用此接口能够精确的控制每个元素插入的位置,能够通过索引来访问List中的元素,允许有相同的元素和null。

  3. Set接口 具有与Collection完全一样的接口,只是行为上不同,Set不保存重复的元素,最大包含一个null元素,不要求有序,没有索引。

  4. Map接口 存储映射关系的接口,将键映射到值的对象---键值对。不能包含重复的键;每个键最多只能映射到一个值(key:value 1对1 多对1)。没有索引,根据键来操作。

  5. Queue接口 Queue是Java提供的队列实现,有点类似List。

  6. Dueue接口 是Queue的一个子接口,为双向队列。

  7. Iterator接口 集合的输出接口,主要用于遍历输出(即迭代访问)Collection集合中的元素,Iterator对象被称之为迭代器。迭代器接口是集合接口的父接口,实现类实现Collection时就必须实现Iterator接口。

Java集合实现类的作用

类名称作用
HashSet为优化査询速度而设计的 Set。它是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,实现比较简单
TreeSet实现了 Set 接口,是一个有序的 Set,这样就能从 Set 里面提取一个有序序列
ArrayList一个用数组实现的 List,能进行快速的随机访问,效率高而且实现了可变大小的数组
ArrayDueue是一个基于数组实现的双端队列,按“先进先出”的方式操作集合元素
LinkedList对顺序访问进行了优化,但随机访问的速度相对较慢。此外它还有 addFirst()、addLast()、getFirst()、getLast()、removeFirst() 和 removeLast() 等方法,能把它当成栈(Stack)或队列(Queue)来用
HashMap按哈希算法来存取键对象
TreeMap可以对键对象进行排序

Collection接口

Collection接口是List、Set和Queue接口的父接口,通常情况下不被直接使用。Collection接口定义了一些通用的方法,通过这些方法可以实现对集合的基本操作。定义的方法既可以用于操作Set集合,也可用于List和Queue集合。

方法名称说明
boolean add(E e)向集合中添加一个元素,如果集合对象被添加操作改变了,则返回 true。E 是元素的数据类型
boolean addAll(Collection c)向集合中添加集合 c 中的所有元素,如果集合对象被添加操作改变了,则返回 true。
void clear()清除集合中的所有元素,将集合长度变为 0。
boolean contains(Object o)判断集合中是否存在指定元素
boolean containsAll(Collection c)判断集合中是否包含集合 c 中的所有元素
boolean isEmpty()判断集合是否为空
Iterator<E>iterator()返回一个 Iterator 对象,用于遍历集合中的元素
boolean remove(Object o)从集合中删除一个指定元素,当集合中包含了一个或多个元素 o 时,该方法只删除第一个符合条件的元素,该方法将返回 true。
boolean removeAll(Collection c)从集合中删除所有在集合 c 中出现的元素(相当于把调用该方法的集合减去集合 c)。如果该操作改变了调用该方法的集合,则该方法返回 true。
boolean retainAll(Collection c)从集合中删除集合 c 里不包含的元素(相当于把调用该方法的集合变成该集合和集合 c 的交集),如果该操作改变了调用该方法的集合,则该方法返回 true。
int size()返回集合中元素的个数
Object[] toArray()把集合转换为一个数组,所有的集合元素变成对应的数组元素。
public class Demo {
	public static void main(String[] args) {
		ArrayList list1 = new ArrayList();
		ArrayList list2 = new ArrayList();
		//创建集合list1和list2
		
		list1.add("one");
		list1.add("two");
		//向list1添加元素
		
		list2.addAll(list1);
		list2.add("three");
		//将list1的所有元素添加到list2
		//向list2添加元素
		
		System.out.println("list2集合中的元素如下:" );
		Iterator it = list2.iterator();
		while(it.hasNext()) {
			System.out.print(it.next()+" ");
		}
	}
}

//输出为:
/*list2集合中的元素如下:
one two three 
/

        由于Collection是接口,不能对其实例化,上述代码使用了Collection接口的ArrayList实现类来调用Collection的方法。add()方法可以向Collection中添加一个元素,而调用addAll()方法可以将指定Collection中的所有元素添加到另一个Collection中。

    public static void main(String[] args) {
		ArrayList list1 = new ArrayList();
		ArrayList list2 = new ArrayList();
		//创建集合list1和list2
		
		list1.add("one");
		list1.add("two");
		list1.add("three");
		System.out.println("list1集合中的元素数
		量:"+list1.size());
		//输出list1中的元素数量
		
		list2.add("two");
		list2.add("four");
		list2.add("six");
		System.out.println("list2集合中的元素数
		量:"+list2.size());
		//输出list12中的元素数量
		
		list2.remove(2);
		//删除list2中的第三个元素
		
		System.out.println("使用remove方法之后的list2的元素数
		量:"+list2.size());
		System.out.println("list2 集合中的元素如下:");
	    Iterator it1 = list2.iterator();
	    while (it1.hasNext()) {
	        System.out.print(it1.next() + " ");
	    }
	    list1.removeAll(list2);
	    System.out.println("\nremoveAll()方法之后 list1 集合中
	    的元素数量:" + list1.size());
	    System.out.println("list1 集合中的元素如下:");
	    Iterator it2 = list1.iterator();
	    while (it2.hasNext()) {
	        System.out.print(it2.next() + " ");
	    }
	}

//输出为:
/*
list1集合中的元素数量:3
list2集合中的元素数量:3
使用remove方法之后的list2的元素数量:2
list2 集合中的元素如下:
two four 
removeAll()方法之后 list1 集合中的元素数量:2
list1 集合中的元素如下:
one three 
*/

        list2 集合在调用 remove(2) 方法删除第 3 个元素之后剩下了 two 和 four。list1.removeAll(list2) 语句会从 list1 中将 list1 和 list2 中相同的元素删除,即删除 two 元素。

注意: retainAll( ) 方法的作用与 removeAll( ) 方法相反,即保留两个集合中相同的元素,其他全部删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Illus1ion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值