Java集合

1. set

 

package com.qf.demo01;

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

public class Test1Set {

	public static void main(String[] args) {
		/*
		 * Set集合的存储特点:
		 * 1、无序
		 * 2、去重
		 */
		Set<String> set1 = new HashSet<>();
		boolean b1 = set1.add("aaa");//true
		boolean b2 = set1.add("bbb");//true
		boolean b3 = set1.add("ccc");//true
		// boolean b4 = set1.add("aaa");//false?.....
		System.out.println(set1.size());//3
		System.out.println(set1);//[aaa, ccc, bbb]
		System.out.println(b1+","+b2+","+b3+","+b4);
		
		boolean b5 = set1.add("ddd");//true
		boolean b6 = set1.add("ddd");//false
		boolean b7 = set1.add("eee");//true
		System.out.println(set1);
		System.out.println(b5+","+b6+","+b7);
		
		/*
		 * list集合的遍历:
		 * 	A:Iterator
		 * 	B:for-each
		 * 	C:普通for循环,结合get()
		 * 	D:ListIterator
		 * 
		 * set集合的遍历:
		 * 	A:Iterator
		 * 	B:for-each	
		 */
		
	}

}

2. HashSet

 

3. Treeste

 

 

package com.qf.demo02;

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

public class Test4TreeSet {

	public static void main(String[] args) {
		/*
		 * TreeSet,作为Set的实现类,
		 * 		- 去重
		 * 		- 有序存储 ?
		 */
		Set<Integer> set1 = new TreeSet<>();
		set1.add(10);//自动装箱:int -- > Integer
		set1.add(7);
		set1.add(16);
		set1.add(5);
		System.out.println(set1.add(16));//false,无法存储重复的元素
		
		System.out.println(set1.size());
		
		System.out.println(set1); //[5, 7, 10, 16]
		
		set1.add(20);
		set1.add(14);
		set1.add(8);
		System.out.println(set1);//[5, 7, 8, 10, 14, 16, 20]
		
		System.out.println("-----------------------------------");
		Set<String> set2 = new TreeSet<>();
		set2.add("abc");
		set2.add("abe");
		set2.add("ddd");
		set2.add("ccc");
		set2.add("abc");
		System.out.println(set2.size());//4
		System.out.println(set2); //[abc, abe, ccc, ddd]
			
	}

}
package com.qf.demo02;

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

public class Test5TreeSet {

	public static void main(String[] args) {
		Set<Person> set = new TreeSet<>();
		Person p1 = new Person("李中狗", 19);
		Person p2 = new Person("李小花", 19);
		Person p3 = new Person("李中狗", 19);
		Person p4 = new Person("李小花", 19);
		Person p5 = new Person("Rose", 20);
		Person p6 = new Person("Jack", 20);
		
		System.out.println((int)'三');//19977
		System.out.println((int)'中');//19977
		System.out.println((int)'小');//23567
		
		
		//[ p2, p1]
		//set.add(p2)
		//p2.compareTo(p1)--->正,负,零
		//p3.compareTo(p2)
		//p3.compareTo(p1)-->零
		
		/*
		 * java.lang.ClassCastException: com.qf.demo02.Person cannot be cast to java.lang.Comparable
		 * 直接向treeSet集合中存储元素,报错了
		 * 
		 * 

java.lang.Comparable接口的用途:强行对实现类的对象进行排序。

compareTo()-->此方法用于排序,返回值int类型类型

o1.compareTo(o2)-->int

- 正数:o1 > o2,将o1排在o2的后面。
- 负数:o1 < o2,将o1排在o2的前面。
- 零:认为o1和o2相同,不存储了。

p1  
	存储p2:p1前?p1后
	
	p2.compareTo(p1)-->int
		正数:p2大,p1小,  p1后面
		负数:p2小,p1大,  p1前面
		零:相同元素,不存储



		 */
		set.add(p1);
		set.add(p2);
		set.add(p3);
		set.add(p4);
		set.add(p5);
		set.add(p6);
		
		System.out.println(set.size());//3
		System.out.println(set);	
		
	}
}

4. comparable

 

 

package com.qf.demo02;

public class Test6CompareTo {

	public static void main(String[] args) {
		String s1 = "abc";
		String s2 = "abe";
		/*
		 * public int compareTo(String s),用于比较2个字符串
		 * 
		 * this.charAt(2) - s.charAt(2)
		 * c - d
		 * 
		 * a:97
		 * b:98
		 * c:99
		 * d:100
		 * e:101
		 * 
		 * k:对应字符不相等的下标
		 * 
		 * int :根据返回值:
		 * 	负数:当前对象小,参数对象大。
		 * 
		 * 	正数:当前对象大,参数对象小。
		 * 
		 * 	零:两个对象相同,重复的元素。
		 */
		System.out.println(s1.compareTo(s2)); //  -2   s1小,s2大
		
		System.out.println(s2.compareTo(s1)); // 2    s2大,s2小
		
		System.out.println("abc".compareTo("abc")); //0  相同
	}

}

5. comparator

 

 

package com.qf.demo01;

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

public class Test1Comparator {

	public static void main(String[] args) {
		/*
		 * 1.Person类:要存储的对象:p1,p2,p3,p4.。。
		 * 
		 * 
		 * 2.TreeSet集合:要存储Person对象,去重,给对象排序
		 * 
		 * 	创建方式一:无参的构造方法	new TreeSet<>()
		 * 		使用Comparable比较器,给对象进行排序
		 * 			compareTo(o)
		 * 
		 *  创建方式二:有参的构造方法 TreeSet(Comparator comparator) 
				构造一个新的,空的树集,根据指定的比较器进行排序。
				
				使用Comparator比较器,给对象进行排序
					compare(o1,o2)
		 * 	3.PersonCompara, -->PersonCompara实现了Comparator	
		 * 
		 * 
		 * compareTo(o)-->int
		 * compare(o1,o2)-->int
		 * 
		 * 正数:
		 * 		this > o 
		 * 		o1 > o2
		 * 负数:
		 * 		this < o
		 * 		o1 < o2
		 * 零:
		 * 		this同o相等
		 * 		o1同o2相等
		 *
		 */
		//方式一:创建TreeSet集合
		Set<Person> set1 = new TreeSet<>();//默认使用Comparable比较器
		
		
		//方式二:创建treeSet集合,指定使用Comparator比较器
		PersonCompara pc = new PersonCompara();//创建Comparator的实现类的对象
		Set<Person> set2 = new TreeSet<>(pc);//指明使用哪个比较器Comparator比较器
		
		set2.add(new Person("aaa", 19));
		set2.add(new Person("aaa", 18));
		set2.add(new Person("bbb", 19));
		set2.add(new Person("aaa", 19));
		System.out.println(set2.size());
		
		System.out.println(set2);
		
		
	}

}

6. LinkHashSet集合

package com.qf.demo02;

import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.Set;

public class Test3LinkedHashSet {

	public static void main(String[] args) {
		//HashSet,可以去重,但是不关心存储的顺序。不保证迭代元素的顺序。也叫作散列存储。
		Set<String> set1 = new HashSet<>();
		set1.add("aaa");
		set1.add("王二狗");
		set1.add("bbb");
		set1.add("李小花");
		set1.add("ccc");
		set1.add("ccc");
		System.out.println(set1);//[aaa, ccc, bbb, 王二狗, 李小花]
		
		//LinkedHashSet作为HashSet的子类,扩展了HashSet的功能,可以记录存储的顺序。保证了迭代的顺序。
		Set<String> set2 =new  LinkedHashSet<String>();
		set2.add("aaa");
		set2.add("王二狗");
		set2.add("bbb");
		set2.add("李小花");
		set2.add("ccc");
		set2.add("ccc");
		System.out.println(set2);
	}

}

7. treeset其他方法

package com.qf.demo02;

import java.util.TreeSet;

public class Test4TreeSet {

	public static void main(String[] args) {
		//TreeSet集合:排序:从小到大。比较器
		TreeSet<String> set = new TreeSet<>();
		set.add("aaa");
		set.add("bbb");
		//bbc
		set.add("ccc");
		set.add("ddd");
		set.add("eee");
		System.out.println(set);
		System.out.println(set.first());//获取集合中的第一个元素,aaa
		System.out.println(set.last());//获取集合中的最后一个元素,eee
		
		System.out.println(set.ceiling("ccc"));//"向上取整",参数不存在,获取参数后的元素,如果参数存在,获取参数本身的数据。
		System.out.println(Math.ceil(3.8));
		
		System.out.println(set.floor("bbc"));//"向下取整"
		System.out.println(Math.floor(4.0));
		
		System.out.println(set.higher("ccc")); //ddd
		System.out.println(set.lower("ccc")); //bbb
		
		System.out.println(set.headSet("ccc")); //[aaa, bbb]
		System.out.println(set.tailSet("ccc")); //[ccc, ddd, eee]
		
		System.out.println(set.subSet("bbb", "ddd")); //[bbb, ccc]
		
		//类比:list.subList(startIndex,endIndex)  s.subString(startIndex,endIndex)
	}

}

  

 

posted @ 2020-07-26 02:11  1769987233  阅读(159)  评论(0)    收藏  举报