`

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集合框架的各个方面,包括Collection、List、Set和Map,以及它们的相关实现和使用原理。 ...

    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集合框架图

    ### Java集合框架详解 #### 一、Java集合框架概述 Java集合框架是Java标准库的重要组成部分,它提供了存储和操作对象的各种数据结构。通过使用集合框架,开发人员可以轻松地管理不同类型的数据集,并且能够利用...

    Java集合框架总结

    ### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...

    Java集合框架.ppt

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

    Java集合框架学习笔记

    Java集合框架是Java编程语言中一个至关重要的组成部分,它提供了数据结构和算法的抽象,使得开发者可以方便地存储和管理各种类型的数据。本篇将详细探讨Java集合框架的基础知识,包括核心接口、类的层级结构以及Java...

    面渣逆袭 Java 集合框架篇.pdf

    面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣逆袭 Java 集合框架篇.pdf面渣...

    JAVA学习 Java集合框架.ppt

    JAVA学习 Java集合框架.ppt

    Java集合框架及泛型

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高效的数据结构和操作这些数据结构的方法。泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入...

    java集合 框架 泛型

    Java集合框架是Java编程语言中一个至关重要的组成部分,它为数据存储和操作提供了丰富的类库。泛型是Java 5引入的一项创新特性,极大地增强了集合框架的安全性和效率。本讲解将深入探讨这两个主题,以及与之相关的...

    JAVA集合框架学习总结

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

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

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

    Java集合框架常见面试题.pdf

    Java集合框架是Java编程语言中的核心部分,它提供了一组高效、灵活的数据结构,使得开发者可以方便地存储和管理各种类型的数据。Java集合框架主要包括两大类:Collection和Map。 Collection接口是所有单值容器的父...

    Java集合框架图

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

    java集合框架笔记

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

    学士后Java集合框架和泛型课后习题答案

    Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的类库。在Java中,集合框架主要包括接口(如List、Set、Queue)和实现这些接口的类(如ArrayList、HashSet、LinkedList等)。这个...

Global site tag (gtag.js) - Google Analytics