`

Java集合框架(2)

阅读更多

|--Set:元素是无序(存入和取出的顺序不一定一致)的,元素不可以重复

 |--HashSet:底层数据结构是哈希表,线程是非同步的。

 |--TreeSet:底层数据结构是二叉树。保证元素唯一性的依据compareTo()方法返回0;会自动对存入Set集合中的元素进行排序(自然排序)。

 

(1)Set集合的功能和Collection一致的,没有特有的方法。

(2)HashSet是如何保证元素唯一性的呢?是通过集合元素的两个方法,hashCode()和equals()。如果元素的哈希值相同,才会判断equals()是否为true。如果元素的哈希值不同,不会调用equals()方法。所以我们要根据特定条件来表示哈希值,从而覆写hashCode()方法。HashSet判断元素是否存在(contains())和删除(remove())的依据:也是通过集合元素的两个方法,hashCode()和equals()。这和ArrayList不一样,ArrayList只依赖equals()方法,这种区别跟底层的数据结构有关系。

(3)TreeSet排序的第一种排序方式:让元素自身具有比较性,元素需要实现Comparable接口,覆盖compareTo()方法,这种方式也叫做元素的自然顺序,即默认顺序。

        TreeSet排序的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是开发所需要的。这时就需要让集合自身具备比较性。在集合初始化时,就有了比较方式。我们可以定义了一个比较器,将比较器对象作为参数传递给TreeSet的构造函数。

        如果以上两种排序都存在时,以比较器(定义一个类,实现Comparator<T>接口,覆盖compare()方法)为主。

 

/* 需求:往TreeSet集合中存储自定义对象学生。想按照学生的年龄进行排序 
只要学生类实现接口 java.lang.Comparable<T>:此接口 强行对实现它的每个类的对象进行整体排序。 这种排序被称为类的自然排序 ,该接口强制让实现它的类具有比较性,该接口只有一个方法:int compareTo(T o) 排序时,当主要条件相同时,一定要判断一下次要条件。否则会出现一样的数据 */

/* TreeSet练习:按照字符串长度排序
字符串本身具有比较性,但是它的比较方式不是所需要的
这时候就需要定义一个比较器 */

import java.util.Comparator;
import java.util.TreeSet;

public class TreeSetDemo {
    public static void main(String[] args) {
    	TreeSet<String> mTreeSet = new TreeSet<String>(new StrlengthComparator());
    	mTreeSet.add("aaa");
    	mTreeSet.add("aaacd");
    	mTreeSet.add("abc");
    	mTreeSet.add("adddddd");
    	mTreeSet.add("adddddddd");
    	
    	for (String string: mTreeSet) {
    		System.out.println(string);
    	}
	}
}
// 如果主要条件相同,需要判断次要条件
class StrlengthComparator implements Comparator<String> {
    public int compare(String s1, String s2) {
	    // 将s1和s2互换位置时,可实现倒序(相对而言)排序
	    int result = new Integer(s1.length()).compareTo(new Integer(s2.length()));
		if (result == 0) {
		    return s1.compareTo(s2);
		}		
		return result;
	}
}

 

 

/* 泛型:JDK1.5版本以后出现新特性。用于解决安全问题,是一个类型安全机制。
	优点:1.将运行时期出现问题ClassCastException,转移到了编译时期,方便程序员解决问题,让运行时期问题减少。2.避免了强制转换的麻烦。	
	当使用集合时,将集合中要存储的数据类型作为参数传递到<>中即可。	
	泛型类。什么时候定义泛型类,当类中要操作的引用类型不确定的时候,早期定义Object来完成扩展。现在用泛型来完成扩展。
	泛型方法。泛型类定义的泛型,在整个类中有效。如果被方法使用,那么泛型类的对象明确要操作的具体类型后,所有要操作的类型就已经固定了。
	为了让不同方法可以操作不同类型,而且类型还不确定。那么可以将泛型定义在方法上。
	访问限定符 <T> 返回类型 方法名(T t)
	泛型静态方法。静态方法不可以访问类上定义的泛型。如果静态方法操作的引用数据类型不确定,可以将泛型定义在方法上。*/
	
	//泛型接口:
	interface Inter<T> {
	    void show(T t);
	}
	
	class InterImpl1 implements Inter<String> {
	    public void show(String s) {
		    System.out.println("show: " + s);
		}
	}
	
	class InterImpl2<T> implements Inter<T> {
	    public void show(T t) {
		  //对t进行操作
		}
	}
	
/*泛型限定:?,通配符,也可以理解为占位符。 
<?>:可以接收任意类型 
<? extends E>:可以接收E类型或者E的子类型,限定了上限。
<? super E>:可以接收E类型或者E的父类型,限定了下限。*/  
分享到:
评论

相关推荐

    Java集合框架总结

    Java集合框架总结Java集合框架总结Java集合框架总结Java集合框架总结Java集合框架总结Java集合框架总结

    Java集合框架详解

    Java集合框架详解Java集合框架详解Java集合框架详解

    java集合框架图

    java集合框架图java集合框架图java集合框架图java集合框架图java集合框架图

    java集合框架面试题

    内含大量java集合框架方面常被面试官问到的经典面试题。

    6.java集合框架.zip

    6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6.java集合框架.zip6....

    【Java】Java集合框架思维导图。

    xmind格式的Java集合框架学习导图,包括Collection接口/Map接口以及具体实现类。 同样包含大厂面试题,也在导图中有所体现。 能学到什么: 更加成体系的知识框架,更加全面的、系统的知识。 思维导图: 思维导图具有...

    Java集合框架.ppt

    集合是将多个元素组成一个单元的...Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了Java集合框架位于java.util包中

    JAVA学习 Java集合框架.ppt

    JAVA学习 Java集合框架.ppt

    JAVA集合框架学习总结

    本文档为本人学习 java 集合框架期间的学习总结笔记,希望对新学习的朋友有所帮助和参考价值。本人java 开发时间不是太长,可能存在不完善或不对之处,欢迎指正!

    Java集合框架使用总结

    Java集合框架使用总结 前言: 本文是对Java集合框架做了一个概括性的解说,目的是对Java集合框架体系有个总体认识,如果你想学习具体的接口和类的使用方法,请参看Java API文档。 一、概述 数据结构对程序设计...

    一个扑克游戏,用于Java集合框架练习.zip

    一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合框架练习 一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合框架练习 一个扑克游戏,用于Java集合框架练习一个扑克游戏,用于Java集合...

    Java集合框架图

    Java集合List集合Set集合Map集合Collection和collections工具类的框架图

    Java集合框架及泛型

    集合框架及泛型的介绍和基础理解,方便大家了解集合框架及泛型。

    Java集合框架学习笔记

    学习Java集合框架的讲义、笔记,希望大家多提意见。时间关系没有Collections,Arrays的内容,以后补上!

    java集合框架笔记

    List set ArraryList Map java集合框架笔记 基于Array的List,其实就是封装了Array所不具备的一些功能方便我们使用

    Java集合框架.pdf

    2、高性能:Java集合框架中的数据结构和算法经过优化,可以提供高效的性能。 3、类型安全:Java集合框架是类型安全的,即只能存储指定类型的对象,不允许存储不同类型的对象。 4、线程安全:Java集合框架中的某些...

    java集合框架java集合框架.doc

    java集合框架java集合框架

    java 集合框架的原理及其使用

    Java集合框架 系统的介绍java集合框架的应用

    数据结构和Java集合框架

    数据结构和Java集合框架,国外经典教材,开发必备

Global site tag (gtag.js) - Google Analytics