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)
}
}

浙公网安备 33010602011771号