Java进阶篇--容器(二)

Set的子接口

 SortedSet接口

进一步提供关于元素的 总体排序 Set。这些元素使用其 自然顺序进行排序,或者根据通常在创建有序 set 时提供的 Comparator 进行排序。该 set 的迭代器将按元素升序遍历 set。提供了一些附加的操作来利用这种排序
方法有:
 
Comparator<? super E> comparator()
返回对此 set 中的元素进行排序的比较器;如果此 set 使用其元素的 自然顺序,则返回 null
SortedSet<E> subSet(E fromElement,
                    E toElement)
返回此 set 的部分视图,其元素从 fromElement(包括)到 toElement(不包括)。(如果 fromElementtoElement 相等,则返回空的 set)。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回的 set 支持此 set 支持的所有可选 set 操作。  
SortedSet<E> headSet(E toElement)
返回此 set 的部分视图,其元素严格小于 toElement。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回的 set 支持此 set 支持的所有可选 set 操作。
SortedSet<E> tailSet(E fromElement)
返回此 set 的部分视图,其元素大于等于 fromElement。返回的 set 受此 set 支持,所以在返回 set 中的更改将反映在此 set 中,反之亦然。返回的 set 支持此 set 支持的所有可选 set 操作。

first()

返回此 set 中当前第一个(最低)元素。

last()

返回此 set 中当前最后一个(最高)元素。

 

LinkedHashSet类

实现了Set接口

是HashSet类的子类

可预知迭代顺序的链接哈希Set(与插入元素的顺序相同),迭代时间与Set大小成正比,与容量无关。

具有HashSet的查询速度,且内部使用链表维护元素的顺序。

创建Set时,使用Collections.synchronizedSet()来包装,防止对该Set进行意外的不同步访问。

   Set s= Collections.synchronizedSet(new LinkedHashSet(…))

TreeSet类

    1.基于TreeMapNavigableSet(SortedSet的子接口实现

    2.底层是树结构

    3.使用元素的自然顺序或根据创建Set时提供的Comparator进行排序

    4.不允许放入null值

创建Set时,使用Collections.synchronizedSortedSet()来包装,防止对该Set进行意外的不同步访问。

Set s= Collections.synchronizedSet(new TreeSet(…))

list接口和Comparable接口

List接口

List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可重复。

List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

List的方法有:

int size()  返回列表中的元素数。
boolean isEmpty()  如果列表不包含元素,则返回 true
boolean contains(Object o)  如果列表包含指定的元素,则返回 true。更确切地讲,当且仅当列表包含满足 (o==null ? e==null : o.equals(e)) 的元素 e 时才返回 true

iterator()  返回按适当顺序在列表的元素上进行迭代的迭代器。

toArray()  返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。

add()  向列表的尾部添加指定的元素(可选操作)。

remove()  从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。如果列表不包含元素,则不更改列表。更确切地讲,移除满足(o==null ? get(i)==null : o.equals(get(i))) 的最低索引i 的元素(如果存在这样的元素)。如果此列表已包含指定元素(或者此列表由于调用而发生更改),则返回true

clear()  从列表中移除所有元素(可选操作)。此调用返回后该列表将是空的。

hashCode()  返回列表的哈希码值。

get(int index)  返回列表中指定位置的元素。

set(int index,      E element)  用指定元素替换列表中指定位置的元素(可选操作)。

int indexOf(Object o)
返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。更确切地讲,返回满足 (o==null ? get(i)==null : o.equals(get(i))) 的最低索引 i;如果没有这样的索引,则返回 -1。

 Comparable接口

此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法

comparable接口只有一个方法:

 

int  compareTo(T o)

比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

主要的作用就是比较,也可以重写compareTo方法,自己定义。

Collections类

java.util.Collections是一个包装类,提供各种有关集合操作的静态多态方法。

Collections不能够实例化,就像一个工具类,服务于Java集合框架。

主要方法有:

public static <T> int binarySearch(List<? extends Comparable<? super T>> list,
                                   T key)
使用二分搜索法搜索指定列表,以获得指定对象。在进行此调用之前,必须根据列表元素的 自然顺序对列表进行升序排序(通过 sort(List) 方法)。如果没有对列表进行排序,则结果是不确定的。如果列表包含多个等于指定对象的元素,则无法保证找到的是哪一个。

此方法对“随机访问”列表运行 log(n) 次(它提供接近固定时间的位置访问)。如果指定列表没有实现 RandomAccess 接口并且是一个大型列表,则此方法将执行基于迭代器的二分搜索,执行 O(n) 次链接遍历和 O(log n) 次元素比较。

public static void reverse(List<?> list)
反转指定列表中元素的顺序。
public static <T> void fill(List<? super T> list,
                            T obj)
使用指定元素替换指定列表中的所有元素。
public static <T> void copy(List<? super T> dest,
                            List<? extends T> src)
将所有元素从一个列表复制到另一个列表。执行此操作后,目标列表中每个已复制元素的索引将等同于源列表中该元素的索引。目标列表的长度至少必须等于源列表。如果目标列表更长一些,也不会影响目标列表中的其余元素。
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
根据元素的 自然顺序,返回给定 collection 的最大元素。collection 中的所有元素都必须实现 Comparable 接口。
public static <T> ArrayList<T> list(Enumeration<T> e)
返回一个数组列表,它按返回顺序包含指定枚举返回的元素。
public static <T> boolean addAll(Collection<? super T> c,
                                 T... elements)
将所有指定元素添加到指定 collection 中。可以分别指定要添加的元素,或者将它们指定为一个数组。

例:

class Example {
	public static void main(String args[]) {
		List<Integer>   link = new   ArrayList<Integer>();
		link.add(10);		link.add(35);
		link.add(23);		link.add(54);
		link.add(36);
	        Comparator cmp = Collections.reverseOrder();
	        Collections.sort(link, cmp);
		Iterator it = link.iterator();
		System.out.println("逆序排序的列表为: ");
		while (it.hasNext()) {
			System.out.println(it.next());
		}
System.out.println("给定列表中的最大值为:" + Collections.max(link));
System.out.println("给定列表中的最小值为:" + Collections.min(link));
	}
}

 

 未完待续....如有你认为有什么错误,还望指点迷津。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值