下面是學(xué)習(xí)的時候?qū)懙囊恍┐a:
1.hashSet的基本使用
2.hashset的特性
3.treeSet的基本使用
4.使用treeSet存自定義對象
5.比較器和對象的自然排序
?1.hashSet的基本使用
privatestaticvoid demo05() {
? ? ? ? //初始化HashSet hSet =new HashSet();
? ? ? ? //添加hSet.add(45);
? ? ? ? hSet.add(77);
? ? ? ? hSet.add(26);
? ? ? ? hSet.add(185);
? ? ? ? hSet.add(523);
? ? ? ? hSet.add(94);
? ? ? ? hSet.add(45);
? ? ? ? //特點(diǎn)一:無序
? ? ? ? //特點(diǎn)二:元素不能重復(fù)? ? ? ? System.out.println(hSet);
? ? ? ? //移除hSet.remove(45);
? ? ? ? //hSet.clear();? ? ? ? System.out.println(hSet);
? ? ? ? //獲取? ? ? ? System.out.println(hSet.size());
? ? ? ? System.out.println(hSet.isEmpty());
? ? ? ? System.out.println(hSet.contains(88));
? ? ? ? /*? ? ? ? * hashSet的迭代方法,同list
? ? ? ? */? ? ? ? Iterator it = hSet.iterator();
? ? }
2.hashset的特性
privatestaticvoid demo06() {
? ? /*? ? * hashset特性
? ? *//*? ? * hashset默認(rèn)大小為16,在存數(shù)據(jù)時,先通過hash函數(shù)算出一個返回值,然后根據(jù)返回值計(jì)算存在哪個位置
? ? * 不會按照順序存進(jìn)去
? ? * 哈希表中存儲數(shù)據(jù)是由哈希函數(shù)來分布,哈希函數(shù)就是元素的hashcode函數(shù)
? ? *
? ? * 如果兩個元素的hash值相同,
? ? *? ? ? ? ? ? ->再次調(diào)用元素的equals方法來比較兩個對象是否相同,如果相同就忽略
? ? *? ? ? ? ? ? ->如果equals判斷不相同,就會以鏈表的方式進(jìn)行掛桶
? ? */? ?
? ? ? ? HashSet hSet =new HashSet();
? ? ? ? hSet.add("t1");
? ? ? ? hSet.add("t1");
? ? ? ? hSet.add("t1");
? ? ? ? hSet.add("t4");
? ? ? ? hSet.add("t5");
? ? ? ? hSet.add("t6");
? ? ? ? //迭代for (String str : hSet) {
? ? ? ? ? ? System.out.println(str);
? ? ? ? }
? ? ? ? //整數(shù)的哈希值是?System.out.println(newInteger(50).hashCode());//50,整數(shù)的hash值就是它本身System.out.println("a".hashCode());//97,字符的hash值就是ASCII碼System.out.println("abc".hashCode());//96354,通過hashcode方法進(jìn)行計(jì)算
? ? ? ? //對象默認(rèn)的hash值就是地址的10進(jìn)制值
? ? ? ? //計(jì)算hash值得屬性,一般用特殊屬性值來進(jìn)行計(jì)算}
3.treeSet的基本使用
privatestaticvoid demo07() {
? ? ? ? /*? ? ? ? * treeSet的基本使用
? ? ? ? * 判斷大小是compareTo方法,判斷元素相同時compareTo返回0就表示相同,
? ? ? ? *///保存整數(shù)TreeSet tSet =newTreeSet<>();
? ? //添加tSet.add(12);
? ? tSet.add(5);
? ? tSet.add(97);
? ? tSet.add(21);
? ? tSet.add(-1);
? ? tSet.add(21);
? ? System.out.println(tSet);
? ? /*? ? * treeSet特點(diǎn):
? ? *? ? 一:唯一性
? ? *? ? 二:會自動排序
? ? */for (Integer integer : tSet) {
? ? ? ? System.out.println(integer);
? ? }
? ? //字符串TreeSet tSet2 =newTreeSet<>();
? ? tSet2.add("aaa");
? ? tSet2.add("bbbb");
? ? tSet2.add("ccccc");
? ? tSet2.add("dddddd");
? ? tSet2.add("OOObb");
? ? tSet2.add("aaa");
? ? System.out.println(tSet2);//字符串排序,如果第一個相同就比較第二個大小,以此類推? ?
? ? }
4.使用treeSet存自定義對象
privatestaticvoid demo08() {
? ? ? ? /*? ? ? ? * 使用treeSet存自定義對象
? ? ? ? * 判斷是否相同的方法不再是hashcode和equals方法,而是compareTo是否返回0
? ? ? ? */? ? TreeSet tSet =newTreeSet<>();
? ? tSet.add(newStudent("小明8", 25));
? ? tSet.add(newStudent("小明", 21));
? ? tSet.add(newStudent("小明6", 20));
? ? tSet.add(newStudent("小明3", 29));
? ? tSet.add(newStudent("小明9", 18));
? ? tSet.add(newStudent("小明", 21));
? ? tSet.add(newStudent("小明9", 18));
? ? for (Student stu : tSet) {
? ? ? ? System.out.println(stu);
? ? }
? ? }
5.比較器和對象的自然排序
比較器,是自己新建一個類,實(shí)現(xiàn)comparator接口。
publicclassComparatorWithPersonimplementsComparator{
? ? /** 1.不需要定制自然規(guī)則,使用比較器來實(shí)現(xiàn)排序
* 此處我新建了一個ComparatorWithPerson類,實(shí)現(xiàn)Comparator接口,該接口實(shí)現(xiàn)的類型是我定義的person類。
*/? ?
? ? @Override
? ? publicint compare(Person o1, Person o2) {
? ? ? ? intageRes = o1.getAge()-o2.getAge();
? ? ? ? intnameRes = o1.getName().compareTo(o2.getName());
? ? ? ? // 年齡優(yōu)先
? ? ? ? //return ageRes == 0 ? nameRes : ageRes;
? ? ? ? // 姓名優(yōu)先returnnameRes == 0 ? ageRes : nameRes;
? ? }
自然排序就是在我定義的person類中,重寫compareTo方法
/*? ? * 2.定制person對象的自然排序規(guī)則
? ? */? ? @Override
? ? publicint compareTo(Person o) {
? ? // 定制排序規(guī)則intageRes =this.age - o.getAge();
? ? intnameRes =this.name.compareTo(o.getName());
? ? // 年齡優(yōu)先
? ? //return ageRes == 0 ? nameRes : ageRes;
? ? // 姓名優(yōu)先returnnameRes == 0 ? ageRes : nameRes;
}