Set

Set:
特点:无序(添加顺序和遍历顺序不同),不重复
        Set接口继承Collection接口,没有扩展新的方法

常用方法:
boolean add(E e) 
          如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。  
void clear() 
          移除此 set 中的所有元素(可选操作)。 
boolean contains(Object o) 
          如果 set 包含指定的元素,则返回 true。 
boolean equals(Object o) 
          比较指定对象与此 set 的相等性。 
boolean isEmpty() 
          如果 set 不包含元素,则返回 true。 
Iterator<E> iterator() 
          返回在此 set 中的元素上进行迭代的迭代器。 
boolean remove(Object o) 
          如果 set 中存在指定的元素,则将其移除(可选操作)。 
int size() 
          返回 set 中的元素数(其容量)。 


遍历:两种
foreach
迭代器:使用较普遍
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;

//输入任意字符串遍历输出
public class SetDemo {
	public static void main(String[] args) {	
		Set<String> set = new HashSet<>();
		Scanner input = new Scanner(System.in);
		String choose = null;
		do {
			System.out.println("请输入一个字符串:");
			set.add(input.next());
			System.out.println("是否继续(y/n):");
			choose = input.next();
		}while(choose.equals("y"));
		
		//遍历
		//方式1:迭代器
		Iterator<String> it = set.iterator();
		while(it.hasNext()) {
			String s = it.next();
			System.out.println(s);
		}
	
		//方式2:foreach
		for (String s : set) {
			System.out.println(s);
		}
	}
}
不能对Set做排序,不合理的
元素的存储有具体结构来决定
实现类:
HashSet
特点:无序,不重复
存储位置跟哈希码有关系
不重复:hashCode() equals(),同HashMap中的键规则一致
底层结构:HashMap, 利用HashMap中的键存储HashSet中的元素
TreeSet
特点:无序,不重复
存储即排序,元素添加时就排序(按照元素实现的Comparable或者提供Comparator实现类对象来进行排序)
不重复:取决于比较器的比较,0则认为重复
底层结构:TreeMap, 利用TreeMap中的键存储TreeSet中的元素
构造方法:
TreeSet()
          构造一个新的空 set,该 set 根据其元素的自然顺序进行排序。
 按照元素实现的Comparable接口来进行比较排序
TreeSet(Comparator<? super E> comparator) 
          构造一个新的空 TreeSet,它根据指定比较器进行排序。

 按照提供的Comparator类型对象进行比较排序

import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
//任意输入字符串,比较长度,按照hash码遍历输出
public class SetDemo2 {
	public static void main(String[] args) {
		//创建一个Set实现类对象,添加多个字符串
		Set<String> set = new TreeSet<>(new Comparator<String>() {

			@Override
			public int compare(String o1, String o2) {
				//按照长度比较,长度相等按照字典顺序比较
				if(o1.length()!=o2.length()) {
					return o1.length()-o2.length();
				}else {
					//按照字典顺序(码值)比较
					return o1.compareTo(o2);
				}
			}
		});
		Scanner input = new Scanner(System.in);
		String choose = null;
		do {
			System.out.println("请输入一个字符串:");
			set.add(input.next());
			System.out.println("是否继续(y/n):");
			choose = input.next();
		}while(choose.equals("y"));
		
		//遍历
		//方式1:迭代器
		Iterator<String> it = set.iterator();
		while(it.hasNext()) {
			String s = it.next();
			System.out.println(s);
		}
	
		//方式2:foreach
		for (String s : set) {
			System.out.println(s);
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值