`

JAVA基础 之 Collections

    博客分类:
  • java
 
阅读更多

 

概述:

    1.Collections(注意不是Collection,而是Collections,多了一个s)

    2.它是一个集合工具类

    3.方法分类:常规操作(查找,最大,最小等)、排序、线程安全(同步)操作、不可变集合

 

package com.cxy.collection;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;

/**
 * @author peter
 */
public class CollectionsTest
{
	public static void main(String[] args)
	{
		List l=new ArrayList();
		l.add(100);
		l.add(-66);
		l.add(0);
		l.add(88);
		
		System.out.println("list:"+l);
		
		Collections.reverse(l);
		System.out.println("反转后的list:"+l);
		
		Collections.shuffle(l);  //随机排序,洗牌
		System.out.println("乱序后的list:"+l);
		
		Collections.swap(l, 1, 3);
		System.out.println("互换序号是1,3元素后的list:"+l);
		
		Collections.sort(l);  //这里是个自然排序,更多排序内容请参见本博客中的《JAVA应用 之 排序》
		System.out.println("排序后的list:"+l);
		
		Collections.binarySearch(l, 88); //二分查找,必须保证list处于有序状态,查询成功返回序号,查不到返回负数

		System.out.println("list中最小的元素是:"+Collections.min(l));
		System.out.println("list中最大的元素是:"+Collections.max(l));
		//上面两个方法 是自然排序,当然您可以自己实现一个Comparator的实现类作为第二个参数,具体见《JAVA应用 之 排序》
		
		l.add(88);
		//88(第二个参数)在list(第一个参数)出现过多少次
		System.out.println("88在list中出现了:"+Collections.frequency(l, 88)+"次");
		
		Collections.replaceAll(l, 88, 66); //将88用66去替代
		System.out.println("替代后的list:"+l);
		
		Collections.fill(l, 66); //使用66(第二个参数)替换list中的所有元素。
		System.out.println("list所有元素都被替换成为66:"+l);
		
		//下面写法的意思是创建一个l这么大的l1,不这么写会报异常,因为copy的时候不会自动扩容
		List l1=new ArrayList(Arrays.asList(new Object[l.size()]));
		Collections.copy(l1, l);
		System.out.println("拷贝l的l1:"+l1);
		System.out.println("l和l1是否相等?"+l.equals(l1));
		System.out.println("l和l1是否是一个引用?"+ (l==l1));
		l1=l;
		System.out.println("l和l1是否相等?"+l.equals(l1));
		System.out.println("l和l1是否是一个引用?"+ (l==l1));
		l1=new ArrayList(l); //这个是一个浅拷贝,l和l1的引用虽然不同,但是l和l1内部的元素引用还是一样的
		System.out.println("l和l1是否相等?"+l.equals(l1));
		System.out.println("l和l1是否是一个引用?"+ (l==l1));
		//上面的问题有些复杂 以后形成一个专题讲解
		
		//创建一个类型安全的集合,下面的意思是这个集合只能是再添加Integer类型数据
		l.add("abc");  //现在还没事~
		try
		{
			Collections.checkedList(l, Integer.class).add("abc");
		}catch(Exception e)
		{
			System.out.println("类型安全操作后,当你再试图添加非Integer类型数据时 发生了异常");
		}
		System.out.println("======================");
		
		/* 注意常用的这些集合(HashSet、HashMap、ArrayList、TreeMap、TreeSet、LinkedList等),
		 * 都不是线程安全的,如果您的程序是在多线程环境下 并且有可能会同时修改同一个集合,那么
		 * 您就需要使用Collections.synchronizedXxx 方法来保证线程安全
		 */
		List sl=Collections.synchronizedList(new ArrayList());
		Map sm=Collections.synchronizedMap(new HashMap());
		Set ss=Collections.synchronizedSet(new HashSet());
		Set sts=Collections.synchronizedSortedSet(new TreeSet());
		
		/* 不可变集合(空集合、指定元素集合、不可变状态)
		 * 1.使用Collections.emptyXxx 方法来创建一个不可变化的空集合
		 * 2.空不可变集合的意义:不会因为赋值null那样带来不可预期的异常,个人理解就是初始化的最佳实践。
		 * 3.指定元素集合:返回一个只包含指定元素的集合,同时也是不可变化的集合
		 *   应用:创建一个不可变化的特殊对象集合,例如:管理员集合,这样这个管理员对象就可以拥有一些集合的方法了
		 *       例如:我判断一些这个用户对象是否是管理员(adminList.contains(user))
		 * 4.不可变状态:获得这个集合的不可变试图(只读)
		 * 3.这里之用list举例,其他集合类似
		*/
		List<String> el=Collections.emptyList();
		System.out.println(el.isEmpty());

		try
		{
			el.add("1");  //如果试图改变它 那么就会抛出UnsupportedOperationException异常
		}catch(Exception e)
		{
			System.out.println("UnsupportedOperationException");
		}
		
		List<String> el1=null;  //通常我们可能习惯这样定义一个list
		try
		{
			el1.contains("abc");  //可能在某个地方我们不小心的这样用了(假设这个存在于一个低概率发生的地方)
		}catch(Exception e)
		{
			System.out.println("null异常");
		}
		
		List<String> singletonL=Collections.singletonList("abcd");
		System.out.println(singletonL);
		
		//通过下面的方式就能得到一个不可变化的(只读)集合(视图的感觉,官方其实也是这么介绍的)
		List<String> listView=Collections.unmodifiableList(l);
	}
}

 

 

 

分享到:
评论

相关推荐

    java的Collections教程

    在Java中,Collection是最基础的接口,它是所有集合类的父接口。Collection接口又分为两种主要的子接口:List和Set。List接口代表有序的集合,允许有重复的元素,例如ArrayList和LinkedList。Set接口则存储不重复的...

    Java Collections.pdf

    Java Collections框架是Java平台的标准库之一,它为开发人员提供了强大的数据结构支持。Java Collections框架设计优雅且功能强大,它不仅简化了开发人员处理集合对象的方式,还提高了程序的可读性和可维护性。本书...

    java collections

    这些集合是Java编程的基础,对于任何Java开发者来说都是必不可少的知识。 1. **ArrayList**: 这是一个基于动态数组的集合,提供了随机访问元素的高效性能。通过索引访问元素,插入和删除元素时的效率相对较低,因为...

    APress - Java Collections

    总之,《APress - Java Collections》一书不仅详尽地介绍了Java集合框架的基础知识,还深入探讨了如何根据具体需求选择和优化集合类,以及如何自定义新的集合实现。通过阅读和实践,读者将能更加熟练地掌握Java集合...

    [Java泛型和集合].(Java.Generics.and.Collections).文字版

    本资料 "[Java泛型和集合].(Java.Generics.and.Collections).Maurice.Naftalin&amp;Philip.Wadler.文字版" 由知名专家Maurice Naftalin和Philip Wadler编著,提供了关于这些主题的深入理解。 **Java泛型** 是自Java...

    数据结构和Java集合框架《Data Structures and the Java Collections Framework》

    本资源《Data Structures and the Java Collections Framework》旨在深入讲解这两个主题,帮助开发者更好地理解和应用它们。 数据结构是指在内存中组织数据的方式,它决定了数据的存储和访问效率。常见的数据结构...

    JAVA基础PPT下载

    这份"JAVA基础PPT下载"提供了一套基础的Java学习资源,适用于初学者,旨在引导新手进入Java的世界。以下是对这份教程可能包含的一些核心知识点的详细阐述: 1. **Java概述**:首先会介绍Java的历史背景,它的创始人...

    java-collections-framework1016

    本教程全面介绍了Java Collections Framework的基础知识,涵盖了集合的基本概念、核心接口、具体实现类以及相关的算法支持等内容。通过学习这些知识,开发者将能够更加熟练地使用Java中的集合类,提高代码的效率和可...

    559.557.JAVA基础教程_集合-Collections工具类常用方法的测试(559).rar

    Java集合框架是Java编程中不可或缺的部分,而Collections工具类则是这个框架中的一个重要工具,它提供了大量静态方法,用于操作各种集合接口(如List、Set、Queue等)的实例。本教程将深入探讨Collections工具类中的...

    JAVA基础课程讲义

    【JAVA基础课程讲义】 第一章 **JAVA入门** 计算机语言的发展经历了从机器语言、汇编语言到高级语言的历程。高级语言中,JAVA以其独特的魅力和优势脱颖而出。JAVA的发展简史可追溯到1995年,由Sun Microsystems...

    Java Collections 2001 by John Zukowski

    Java Collections Framework是Java标准库的核心组成部分之一,它提供了一套高级数据结构来存储和操作对象。这些数据结构包括列表(List)、集(Set)、映射(Map)等,并且它们之间存在继承关系。了解并熟练运用Java集合...

    Java 基础核心总结.pdf

    以上只是Java基础知识的冰山一角,深入学习Java还包括设计模式、网络编程、数据库连接、反射、注解、NIO等高级主题。Java的强大之处在于它的全面性、稳定性和广泛的应用场景,使其成为软件开发的首选语言。

Global site tag (gtag.js) - Google Analytics