Collection ,List,Set 接口

1. Collection 简介

Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。此接口通常用来传递 collection,并在需要最大普遍性的地方操作这些 collection。

Collection 容器中只能放对象,不能存放基本数据类型,

数组里面可以存放基本数据类型和对象。

Collection接口定义:public interface Collection<E>extends Iterable<E>

// 该接口中的所有方法
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<E> 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> T[] toArray(T[] a) // 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。 
// 所有方法的使用方法,该样例么有任何意义,只是为了记录每个方法的调用方式
ArrayList al1 = new ArrayList();
al1.add("JAVA01");
al1.add("JAVA02");
al1.add("JAVA03");
ArrayList al2 = new ArrayList();
al2.add("JAVA03");
al2.add("JAVA04");

al1.addAll(al2);    // [JAVA01, JAVA02, JAVA03, JAVA03, JAVA04]
al1.contains("JAVA01");    // true
al1.containsAll(al2);    // false
al1.isEmpty();    // false
al1.size();    // 3
al1.remove("JAVA01");
al1.removeAll(al2);
al1.retainAll(al2);
al1.clear();

Iterator iterator = al1.iterator();
while(iterator.hasNext()) {
    System.out.println(iterator.next());
}

2. List 简介

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。

与 set 不同,列表通常允许重复的元素。更确切地讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 null 元素。

List 接口的实现类,其删除操作,修改操作,依赖的都是其底层的 equals() 方法。

// List 接口继承自 Collection 接口,所有的 Collection 接口中的方法 List 接口中都有,这里只介绍 List 接口中特有的
void add(int index, E element) // 在列表的指定位置插入指定元素(可选操作)。 
boolean addAll(int index, Collection<? extends E> c) // 将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。 
E get(int index) // 返回列表中指定位置的元素。 
int indexOf(Object o) // 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。 
int lastIndexOf(Object o) // 返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。 
ListIterator<E> listIterator() // 返回此列表元素的列表迭代器(按适当顺序)。 
ListIterator<E> listIterator(int index) // 返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。 
E remove(int index) // 移除列表中指定位置的元素(可选操作)。 
E set(int index, E element) // 用指定元素替换列表中指定位置的元素(可选操作)。 
List<E> subList(int fromIndex, int toIndex) // 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。 

2.1 List 接口中提供的 iterator() 方法和 listIterator()方法的区别 

// List 接口中提供的 iterator() 方法和 listIterator()方法的区别
/*
 * 1. 来源不同
 * 	iterator() 方法是由 Iterator 接口提供的
 * 	listIterator() 方法是 ListIterator 接口提供的,
 * 	ListIterator 继承了Iterator接口,并对其进行了拓展。
 * 2. 作用范围不同
 * 	iterator() 方法是从 Collection 接口中继承过来的,针对于所有集合
 * 	listIterator() 方法是 List 接口特有的,只针对实现了 List 接口的集合有这种方法
 * 3. 方法不同
 * 	Iterator 接口中只提供了三个方法: hasNext(), next(), remove();
 * 	ListIterator 接口中提供了九个方法,除了Iterator中的三个:hasNext(), next(), remove();
 * 		还拓展了 hasPrevious(), previous(), nextIndex(), previousIndex(), set(), add()
 * 4. 通过 iterator() 方法获取到的迭代器,只能对集合进行正序遍历和删除
 * 5. 通过listIterator() 方法获取到的迭代器,可以对集合进行正序,逆序,添加(add()), 删除(remove()), 修改(set())
 */	
public static void main(String[] args) {
	ArrayList al1 = new ArrayList();
	al1.add("JAVA01");
	al1.add("JAVA02");
	al1.add("JAVA03");

	ListIterator listIterator = al1.listIterator();
	while(listIterator.hasNext()){
		System.out.print(listIterator.next() + " ");
		if(listIterator.nextIndex() == 2) {
			listIterator.add("C语言");
		}
	}
	/*
	 * 用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。
	 * 只有在最后一次调用 next 或 previous 后既没有调用 ListIterator.remove 也没有调用 ListIterator.add 时才可以进行该调用。 
	 */
	listIterator.set("JAVA语言");
	System.out.println();
	
	while(listIterator.hasPrevious()){
		System.out.print(listIterator.previous() + " ");
	}
}
/*
 * 输出:
 * JAVA01 JAVA02 JAVA03 
 * JAVA语言 C语言 JAVA02 JAVA01 
 */

3. Set 介绍

一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1e2,并且最多包含一个 null 元素。正如其名称所暗示的,此接口模仿了数学上的 set 抽象。

Set 接口只是完全继承了 Collection 接口,没有进行新的拓展,所以 Set 接口里面声明的方法与 Collection 接口里面一样。

Set 接口的实现类保证元素不重复的底层依赖的是其 hashCode() 方法和 equals() 方法。

4. 总结

Collection
    |---List
    |---Set

这篇文章只是分析了几个接口,学习是一个从上向下,循序渐进的的过程。之后我还会继续更新。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值