zoukankan      html  css  js  c++  java
  • 从头认识java-15.5 使用LinkedHashSet须要注意的地方

    再接着上一个章节。我们来聊一下使用LinkedHashSet须要注意的地方。

    LinkedHashSet特点:

    (1)元素是有顺序的

    (2)元素是不反复的

    (3)底层数据结构是依照链表的结构存储的

    (4)须要又一次hashcode和equals方法

    样例:(我们再次改动上一章节的代码)

    package com.ray.ch15;
    
    import java.lang.reflect.InvocationTargetException;
    import java.util.LinkedHashSet;
    import java.util.Set;
    
    public class Test<T> {
    	public static <T> Set<T> fill(Set<T> set, Class<T> type)
    			throws InstantiationException, IllegalAccessException,
    			IllegalArgumentException, SecurityException,
    			InvocationTargetException, NoSuchMethodException {
    		for (int i = 0; i < 10; i++) {
    			set.add(type.getConstructor(int.class).newInstance(i));
    		}
    		return set;
    	}
    
    	public static <T> void test(Set<T> set, Class<T> type)
    			throws IllegalArgumentException, SecurityException,
    			InstantiationException, IllegalAccessException,
    			InvocationTargetException, NoSuchMethodException {
    		fill(set, type);
    		fill(set, type);
    		fill(set, type);
    		System.out.println(set);
    	}
    
    	public static void main(String[] args) throws IllegalArgumentException,
    			SecurityException, InstantiationException, IllegalAccessException,
    			InvocationTargetException, NoSuchMethodException {
    		test(new LinkedHashSet<TreeType>(), TreeType.class);
    		test(new LinkedHashSet<SetType>(), SetType.class);
    		test(new LinkedHashSet<HashType>(), HashType.class);
    	}
    }
    
    class SetType {
    	private int id = 0;
    
    	public int getId() {
    		return id;
    	}
    
    	public void setId(int id) {
    		this.id = id;
    	}
    
    	public SetType(int i) {
    		id = i;
    	}
    
    	@Override
    	public String toString() {
    		return id + "";
    	}
    
    	@Override
    	public boolean equals(Object obj) {
    		return obj instanceof SetType && (id == ((SetType) obj).id);
    	}
    }
    
    class HashType extends SetType {
    
    	public HashType(int i) {
    		super(i);
    	}
    
    	@Override
    	public int hashCode() {
    		return getId();
    	}
    }
    
    class TreeType extends HashType implements Comparable<TreeType> {
    	public TreeType(int i) {
    		super(i);
    	}
    
    	@Override
    	public int compareTo(TreeType o) {
    		if (o.getId() > getId()) {// 排序
    			return -1;
    		} else {
    			if (o.getId() == getId()) {// 去重
    				return 0;
    			} else {
    				return 1;
    			}
    		}
    	}
    }
    

    输出:

    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


    注意:在TreeType里面的Comparable接口是没什么用的。


    总结:我们这一章节简单展示了使用LinkedHashSet须要注意的地方。


    这一章节就到这里,谢谢。

    -----------------------------------

    文件夹



  • 相关阅读:
    leetcode网解题心得——61. 旋转链表
    leetcode面试题 02.06. 回文链表,解题心路
    池化技术——自定义线程池
    使用java基础实现一个简陋的web服务器软件
    操作系统中的经典问题——生产者消费者问题(两种方式实现)
    javascript垃圾收集 [重温JavaScript基础(三)]
    JavaScript 执行环境以及作用域链[重温JavaScript基础(二)]
    基本类型和引用类型的值 [重温JavaScript基础(一)]
    css中的函数
    z-index的展现形式
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7205745.html
Copyright © 2011-2022 走看看