集合

1.Java集合概述

Java 中的集合大致上可分为4种体系,分别是Set,List,Map和Queue,具体说明如下所示。

  • Set:代表无序、不可重复的集合。
  • List:代表有序,重复的集合。
  • Map:代表具有映射关系的集合。
  • Queue:从JDK1.5以后增加的一种体系集合,代表一种队列集合实现。

Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)“丢进”该容器中。
在JDK 1.5之前,Java集合会丢失容器中所有对象的数据类型,把所有对象都当成Object 类型处理,从JDK1.5增加了泛型以后,Java集合可以记住容器中对象的数据类型,从而可以编写更简洁,健壮的代码。

很大程度上,一旦理解了接口就能够理解整个框架。虽然总要创建接口特定的实现,但访问实际集合的方法应该限制在接口的使用上。着允许我们更改基本的数据结构而不必改变其他代码。

Java集合框架中主要存在如下对象

接口概念作用
Collection接口是一组允许重复的对象
Set接口继承与Collettion,但不允许重复,使用自己内部的一个排列机制
List接口继承于Collection,允许重复,以元素安插的次序来放置元素,不会重新排列
Map接口是一组成对的键-值对象,即所只有的是Key-value pairs。Map中不能有重复的key,它拥有自己的内部排列机制

容器中的元素都为Object,从容器取得元素时必须将它转换成原来的类型

2.Collection接口和Iterator接口

Collection接口用于表示任何对象或者元素组,想要尽可能的以常规方式处理一组元素时,就使用这一接口。

2.1 基础知识介绍

在Collection接口中主要存在如下类别的功能方法。
(1)单元素添加、,删除操作。

  • boolean add(Object o):将对象添加给集合。
  • boolean remove(Object o):如果集合中有与o相匹配的对象,则删除对象o。

(2)查询操作。

  • int size:返回当前集合中元素的数量。
  • boolean isEmpty():判断集合中是否有任何元素。
  • boolean contains(Object o):查找集合中是否含有对象o。
  • Iterator iterator():返回一个迭代器,用来访问集合中的各个元素。

(3)组操作(作用于元素组或整个集)。

  • boolean containsAll(Collection c):查找集合中是否含有集合c中所有元素。
  • boolean addAll(Collection c):将集合c中所有元素添加给该集合。
  • void clear():删除集合中所有元素。
  • void removeAll(Collection c):从集合中删除集合c中的所有元素。
  • void retainAll(Collection c):从集合中删除集合c中不包含的元素。

(4)将Collection 转换为 Object 数组。

  • Object[] toArray():返回一个内含集合所有元素的 array.
  • Object[] toArray(Object[] a):返回一个内含集合所有元素的array。运行期间返回的array 和参数a的类型相同,需要转换为正确的类型。

方法摘要

  • boolean add(E e)
    确保此 collection 包含指定的元素(可选操作)。
  • boolean addAll(Collection<? extends E> c)
    将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。
  • void clear()
    移除此 collection 中的所有元素(可选操作)。
  • boolean contains(Object o)
    如果此 collection 包含指定的元素,则返回 true。
  • boolean containsAll(Collection<?> c)
    如果此 collection 包含指定 collection 中的所有元素,则返回 true。
  • boolean equals(Object o)
    比较此 collection 与指定对象是否相等。
  • int hashCode()
    返回此 collection 的哈希码值。
  • boolean isEmpty()
    如果此 collection 不包含元素,则返回 true。
  • Iterator iterator()
    返回在此 collection 的元素上进行迭代的迭代器。
  • boolean remove(Object o)
    从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。
  • boolean removeAll(Collection<?> c)
    移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。
  • boolean retainAll(Collection<?> c)
    仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。
  • int size()
    返回此 collection 中的元素数。
  • Object[] toArray()
    返回包含此 collection 中所有元素的数组。
  • T[] toArray(T[] a)
    返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

由于一个接口实现必须实现所有的接口方法,因此调用程序就需要一种途径来知道一个可选的方法是否受支持;
如果选择的方法不受支持,就会抛出UnsupportedOperationException异常表示操作失败,这个异常继承于RuntimeException类,避免了将所有集合操作放入try-catch块中

类 AbstractCollection

此类提供 Collection 接口的骨干实现,以最大限度地减少了实现此接口所需的工作。
要实现一个不可修改的 collection,编程人员只需扩展此类,并提供 iterator 和 size 方法的实现。(iterator 方法返回的迭代器必须实现 hasNext 和 next。)
要实现可修改的 collection,编程人员必须另外重写此类的 add 方法(否则,会抛出 UnsupportedOperationException),iterator 方法返回的迭代器还必须另外实现其 remove 方法。
按照 Collection 接口规范中的建议,编程人员通常应提供一个 void (无参数)和 Collection 构造方法。
此类中每个非抽象方法的文档详细描述其实现。如要实现的 collection 允许更有效的实现,则可以重写这些方法中的每个方法。

Iterator接口

能够迭代的访问集合中的各个元素,并安全的从Collection除去适当的元素

  • boolean hasNext():判断是否存在另一个可访问的元素
  • Object next():返回要访问的下一个元素。如果到达集合末尾,则抛出NoSuchElement Exception异常。
  • void remove():删除上次访问返回的对象。必须紧跟在一个元素的访问后执行,如果集合已经被修改,则返回IllegalStateException异常。

使用Collection方法操作集合里的元素

import java.util.*;
public class yongCollection
{
	public static void main(String[] args) 
	{
		Collection c = new ArrayList();
		//添加元素
		c.add("美美");
		//虽然集合里不能放基本类型的值,但Java支持自动装箱
		c.add(6);
		System.out.println("集合c的元素个数为:" + c.size());
		//删除指定元素
		c.remove(6);
		System.out.println("集合c的元素个数为:" + c.size());
		//判断是否包含指定字符串
		System.out.println("集合c的是否包含美美字符串:" + c.contains("美美"));
		c.add("android江湖");
		System.out.println("集合c的元素:" + c);
		Collection books = new HashSet();
		books.add("android江湖");
		books.add("会当凌绝顶");
		System.out.println("集合c是否完全包含books集合?" + c.containsAll(books));
		//用c集合减去books集合里的元素
		c.removeAll(books);
		System.out.println("集合c的元素:" + c);
		//删除c集合里所有元素
		c.clear();
		System.out.println("集合c的元素:" + c);
		//books集合里只剩下c集合里也同时包含的元素
		books.retainAll(c);
		System.out.println("集合books的元素:" + books);
	}
}

运行结果为

集合c的元素个数为:2
集合c的元素个数为:1
集合c的是否包含美美字符串:true
集合c的元素:[美美, android江湖]
集合c是否完全包含books集合?false
集合c的元素:[美美]
集合c的元素:[]
集合books的元素:[]

3.Set接口

Set集合同Collection基本类似,它没有提供任何额外的方法。可以说Set就是一个Collection,只不过其行为不同。

Set不允许包含相同的元素,如果试图把两个相同元素加入同一个Set集合中,则添加操作失败,add方法会返回false,并且不会增加元素。

3.1 基础知识介绍

1.Hash表

Hash表是一种数据结构,用于查找对象。Hash表为每个对象计算出一个整数,称为Hash Code(哈希码)

如果Hash表中的元素放的太满,就必须进行rehashing(再哈希)

2.Comparable接口和Comparator接口

(1) Comparable接口
在包java.lang中,接口Comparable适用于一个类有自然顺序的时候。假定对象集合是同一类型,该接口允许我们把集合排序城自然顺序;

其中方法int compareTo(Object o)用于比较当前实例对象与对象o。如果位于对象o之前,则返回负值;如果两个对象在排序中位置相同,则返回0;如果位于对象o后面,则返回正值。

8种基本类型的自然排序

排序
BigDecimal、BigInteger、Byte、Double、Float、Integer、Long、Short按数字大小排序
Character按Unicode值的数字大小排序
String按字符串中字符Unicode值排序

利用Comparable接口创建自己的类排序的过程,只是实现comparableTo()方法的问题。通常是依赖几个数据成员的自然排序。同时类也应该覆盖equals()和hashCode()以确保两个相等的对象返回同一个哈希码。

(2) Comparable接口

如果不能够实现java.lang.Comparable,或者不喜欢默认的Comparable行为,可以使用Comparator接口来定义一个比较器

方法作用
int compare(T o1,T o2)比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
boolean equals(Object obj)指示某个其他对象是否“等于”此 Comparator

(3) SortedSet接口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值