集合框架(Set&&堆栈案例)

目录

 

一:Set特点、遍历方式、以及常用实现类

二: LinkedHashSet的特点

三:案例:堆栈 

一:Set

1. Set
  1.1 特点:无序、对象不能重复
  1.2 遍历
    1.2.1 foreach
    1.2.2 迭代器   
  1.3 常用实现类
      HashSet
      TreeSet:根据某种(规则)对里面的元素进行排序
        自然比较接口: java.lang.Comparable 
        比较器: java.util.Comparator
        String以AscII码进行比较,返回差值

特点与遍历方式:

package com.zking.collection;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class Demo01 {
	public static void main(String[] args) {
		//Set集合的特点 1.无序
		Set set = new HashSet();
		
		set.add("a");
		set.add("b");
		set.add("c");
		set.add("d");
		//遍历方式只有两种 1.foreach
		for (Object object : set) {
			System.out.println(object);
		}
		System.out.println("--------------");
		//2.迭代器
		Iterator it = set.iterator();
		while(it.hasNext()) {
			Object next = it.next();
			System.out.println(next);
		}
		System.out.println("---------------");
		//Set集合的特点 2.元素不能重复
		set.add("a");
		
		for (Object object : set) {
			System.out.println(object);
		}
	}
}

TreeSet:根据某种(规则)对里面的元素进行排序

package com.zking.collection;

import java.util.Set;
import java.util.TreeSet;

public class Demo02 {

	public static void main(String[] args) {
		Set<String> set = new TreeSet<String>();
		//根据某种(规则)对里面的元素进行排序
		set.add("a");
		set.add("z");
		set.add("f");
		set.add("b");
		set.add("d");
		
		for (String string : set) {
			System.out.println(string);
		}
		
		
	}

}

 

自然比较接口: java.lang.Comparable 

package com.zking.collection;

import java.io.Serializable;

public class User implements Serializable,Comparable<User>{

	/**
	 * 
	 */
	private static final long serialVersionUID = 2077569180889064728L;
	
	private Integer id;
	private String name;
	private String sex;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public User() {
		// TODO Auto-generated constructor stub
	}
	public User(Integer id, String name, String sex) {
		this.id = id;
		this.name = name;
		this.sex = sex;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", sex=" + sex + "]";
	}
	@Override
	public int compareTo(User o) {
		//int i =this.getId()-o.getId();//顺序
		//int i =o.getId()-this.getId();倒序
		//i有三种结果   大于0顺序,小于0倒序,等于0不会添加
		int i = this.getName().hashCode()-o.getName().hashCode();
		return i;
	}
	
}

测试类: 

package com.zking.collection;

import java.util.Set;
import java.util.TreeSet;

public class Demo03 {
	public static void main(String[] args) {
		Set<User> set = new TreeSet<User>();
		//根据某种(规则)对里面的元素进行排序
		set.add(new User(1, "a", "男"));
		set.add(new User(3, "z", "男"));
		set.add(new User(2, "f", "女"));
		set.add(new User(4,"a","女"));
		
		for (User user : set) {
			System.out.println(user);
		}
	}
}

 比较器: java.util.Comparator

package com.zking.collection;

import java.io.Serializable;

public class User implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 2077569180889064728L;
	
	private Integer id;
	private String name;
	private String sex;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public User() {
		// TODO Auto-generated constructor stub
	}
	public User(Integer id, String name, String sex) {
		this.id = id;
		this.name = name;
		this.sex = sex;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", sex=" + sex + "]";
	}
//	@Override
//	public int compareTo(User o) {
//		//int i =this.getId()-o.getId();//顺序
//		//int i =o.getId()-this.getId();倒序
//		//i有三种结果   大于0顺序,小于0倒序,等于0不会添加
//		int i = this.getName().hashCode()-o.getName().hashCode();
//		return i;
//	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		result = prime * result + ((sex == null) ? 0 : sex.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		if (sex == null) {
			if (other.sex != null)
				return false;
		} else if (!sex.equals(other.sex))
			return false;
		return true;
	}
	
}

 

package com.zking.collection;

import java.util.Comparator;

public class NameComparator implements Comparator<User>{

	@Override
	public int compare(User o1, User o2) {
		if(o1.getName().hashCode()-o2.getName().hashCode()>0) {
			return 10;
		}else if(o1.getName().hashCode()-o2.getName().hashCode()<0){
			return -1;
		}else {
			return 1;
		}
	}

}
package com.zking.collection;

import java.util.Set;
import java.util.TreeSet;

public class Demo03 {
	public static void main(String[] args) {
		Set<User> set = new TreeSet<User>(new NameComparator());
		//根据某种(规则)对里面的元素进行排序
		set.add(new User(1, "a", "男"));
		set.add(new User(3, "z", "男"));
		set.add(new User(2, "f", "女"));
		set.add(new User(7,"a","女"));
		
		for (User user : set) {
			System.out.println(user);
		}
	}
}

 如果比较器NameComparator else里返回的是零,就不会添加,id=7的那一列就没有

 二: LinkedHashSet的特点

  1)元素是有顺序的
  2)元素是不重复的
  3)底层数据结构是按照链表的结构存储的 Linked

三:案例:堆栈 :表示一个先进后出的数据结构

package com.zking.dog;

import java.util.LinkedList;

public class MyStack {
	public LinkedList list = new LinkedList();
	
	/**
	 * 压栈   装子弹
	 * @param obj
	 */
	public void push(Object obj) {
		list.addFirst(obj);
	}
	
	/**
	 * 出栈  开枪
	 * @return
	 */
	public Object pop() {
		Object pop = list.pop();
		return pop;
	}
	
	/**
	 * 堆栈的元素个数
	 * @return
	 */
	public int getSize() {
		return list.size();
	}
	
	public static void main(String[] args) {
		MyStack ms = new MyStack();
				
		ms.push("aa");
		ms.push("bb");
		ms.push("cc");
		while(ms.getSize()!=0) {
			Object ob=ms.pop();
			System.out.println(ob);
		}
		
		
	
	}
}

 

好了,我的分享到此结束,希望能帮到大家!!! 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值