JavaSE基础 集合2

1.Set接口:Set集合继承自Collection集合
Set:底层数据结构是一个哈希表,能保证元素是唯一的,元素不重复!
通过它的子实现了HashSet集合去实例化,HashSet集合底层是HashMap集合的实例!

/**
 * 
 */
package org.zst.set;

import java.util.HashSet;import java.util.Set;
/**
 * 需求:Set集合存储字符串元素并遍历
 * @author:zsyht
 * @date:2017-11-16下午1:24:08
 */
public class Demo {
public static void main(String[] args) {
		
		//创建Set集合对象
		Set<String> set = new HashSet<String>() ;
		
		//添加元素
		set.add("枯藤");
		set.add("枯藤") ;
		set.add("西风") ;
		set.add("瘦马") ;
		set.add("瘦马") ;
		set.add("人家") ;
		
		//增强for遍历
		for(String s :set){
			System.out.println(s);
		}
	}
}


Set集合的子实现类:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。
看源码
 HashSet集合的add()方法,底层是依赖于双列集合HashMap<K,V>的put(K key,V value)来实现的
 put(K key,V value):底层又依赖于HashCode()和equals()方法,传递添加元素的时候,首先判断的是每一个元素对应的HashCode值是否一样,如果HashCode值一样,还比较他们的equals()方法,由于现在集合存储的是String类型,String类型本身重写了equals()方法,所以,默认比较的是内容是否相同,如果内容相同,这里最终返回的就是第一次存储的那个元素,由这两个方法保证元素唯一性!

package org.zst.set;
import java.util.HashSet;
/**
 * @author:zsyht
 * @date:2017-11-16下午1:30:51
 */
public class Demo2 {
	//private int num ;
	 transient int num ;
	 public static void main(String[] args) {
		
		//创建HashSet集合对象
		HashSet<String> hs = new HashSet<String>();
		
		//给该集合中添加元素
		hs.add("hello") ;
		hs.add("ssy") ;
		hs.add("ssy") ;
		hs.add("哈哈哈") ;
		hs.add("哈哈哈") ;
		
		//遍历
		for(String s :hs){
			System.out.println(s);
		}
	}
}

 

具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。
  
  LinkedHashSet集合:
 由哈希表保证元素的唯一性
 由链接列表来保证元素的有序性

/**
 * 
 */
package org.zst.linkedList;


import java.util.LinkedHashSet;


/**
 * @author:zsyht
 * @date:2017-11-16下午2:32:46
 */
public class Demo {
public static void main(String[] args) {
		
		//创建LinkedHashSet集合对象
		LinkedHashSet<String> link = new LinkedHashSet<String>();
		
		//给集合中添加元素
		link.add("枯藤") ;
		link.add("老树") ;
		link.add("老树") ;
		link.add("老树") ;
		link.add("昏鸦") ;
		link.add("古道") ;
		link.add("古道") ;
		
		//遍历集合
		for(String s: link){
			System.out.println(s);
		}
	}
}

TreeSet集合:

TreeSet集合底层是依赖于TreeMap的实例,而TreeMap<k,v>是依赖于红黑树结构实现的

两种:

自然排序

比较器排序

   /**
 * 
 */
package org.zst.treeset;


import java.util.TreeSet;


/**
 * @author:zsyht
 * @date:2017-11-16下午3:17:54
 */
public class Demo {
    public static void main(String[] args) {


        // 创建TreeSet集合对象
        TreeSet<Integer> ts = new TreeSet<Integer>();//


        // 添加元素
        ts.add(20);// Integer i = Integer.valueOf(20) ;
        ts.add(18);
        ts.add(23);
        ts.add(22);
        ts.add(17);
        ts.add(24);
        ts.add(19);
        ts.add(18);
        ts.add(24);


        // 遍历这些元素
        for (Integer i : ts) {
            System.out.print(i + " ");// 17 18 19 20 22 23 24 :唯一并且排序:自然排序(升序排序)
        }
    }
}

TreeSet集合存储自定义对象并遍历实现了compareable接口,重写了comapreTo()方法,里面的逻辑是一个排序条件; 
一个类中的元素想要自然排序,那么必须实现Compareable接口,实现compareTo(类名 对象名){}方法

按照学生姓名长度进行排序:

元素唯一性:取决返回值是否为0 

要使用TreeSet集合的比较器排序:依赖于构造方法

两种方式实现比较器排序: 

Comparator接口作为形式参数进行传递,需要该接口的子实现类对象

/**
 * 
 */
package org.zst.treeset2;

/**
 * @author:zsyht
 * @date:2017-11-16下午3:28:00
 */
public class Student {
	private String name ;
	private int age ;
	public Student() {
		super();
	}
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}
/**
 * 
 */
package org.zst.treeset2;
import java.util.Comparator;

/**
 * @author:zsyht
 * @date:2017-11-16下午3:29:16
 */
public class mycomparator implements Comparator<Student> {
		@Override
		public int compare(Student s1, Student s2) {
//			return 0;
//			按照学生姓名长度从小到大进行排序
			//int num = this.name.lengt()-s.name.length();
			//this--:s1
			//s---:s2
			
			int num = s1.getName().length() - s2.getName().length() ;
			//次要条件:姓名长度一样,还要比较姓名的内容是否一样
			int num2 = num==0 ? s1.getName().compareTo(s2.getName()): num ;
			
			//姓名长度和内容都一样,还需比较两个人的年龄是否一样
			int num3 = num2 ==0 ? s1.getAge() - s2.getAge() : num2 ;
			
			return num3 ;
		}

	}
/**
 * 
 */
package org.zst.treeset2;

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

/**
 * @author:zsyht
 * @date:2017-11-16下午3:39:26
 */
public class Demo {
	public static void main(String[] args) {
		TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {

			@Override
			public int compare(Student s1, Student s2) {
//				return 0;
				
				int num = s1.getName().length() - s2.getName().length() ;
				//次要条件:姓名长度一样,还要比较姓名的内容是否一样
				int num2 = num==0 ? s1.getName().compareTo(s2.getName()): num ;
				
				//姓名长度和内容都一样,还需比较两个人的年龄是否一样
				int num3 = num2 ==0 ? s1.getAge() - s2.getAge() : num2 ;
				
				return num3 ;
			}
			
		}) ;
		//创建学生对象
				Student s1 = new Student("gaoyuanyan", 27) ;
				Student s2 = new Student("liushishi", 22);
				Student s3 = new Student("fengqingy", 23) ;
				Student s4 = new Student("wuqilong", 35) ;
				Student s5 = new Student("gaoyuanyuan",27) ;
				Student s6 = new Student("zhangguorong",29) ;
				Student s7 = new Student("gaoyuanyuan",26) ;
				
				
				//添加元素
				ts.add(s1) ;
				ts.add(s2) ;
				ts.add(s3) ;
				ts.add(s4) ;
				ts.add(s5) ;
				ts.add(s6) ;
				ts.add(s7) ;
				
				//增强for遍历
				for(Student s : ts){
					System.out.println(s.getName()+"----"+s.getAge());
				}
		  }
	}




weixin073智慧旅游平台开发微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
python017基于Python贫困生资助管理系统带vue前后端分离毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
weixin102旅游社交微信小程序+ssm后端毕业源码案例设计 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值